gpt4 book ai didi

Android 通过 AsyncTask 下载文件不适用于 3G 仅适用于 Wi-Fi

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:45 24 4
gpt4 key购买 nike

我对此进行了很多搜索,但没有找到答案。

我想下载一个文件(给出 url、目的地和文件名)。我有一个扩展 AsyncTast 类的类。它适用于 Wi-Fi 连接,但不适用于移动数据(G、3g、H)!我不明白为什么,我要疯了。

谁能遇到我相同或相似的问题?谢谢!

我在下面发布我的代码。谢谢

public class AsyncDownloader extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... sUrl) {
try {
Log.v("Downloader", "Source: " + sUrl[0]);
Log.v("Downloader", "Destin: " +sUrl[1]+"/" + sUrl[2]);
URL url = new URL(sUrl[0]);
URLConnection connection = url.openConnection();
connection.connect();
// this will be useful so that you can show a typical 0-100% progress bar
int fileLength = connection.getContentLength();

// download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(sUrl[1]+"/" + sUrl[2]);

byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
// publishProgress((int) (total * 100 / fileLength));
output.write(data, 0, count);
}

output.flush();
output.close();
input.close();
} catch (Exception e) {
}
return null;
}
}

从主要 Activity ..

AsyncDownloader downloader = new AsyncDownloader();
downloader.execute("http://....", "...destination...", "...filename...");

有时我在目标目录中找到了文件,但它没有完全下载或者是 0 kB..

在 AndroidManifest.xml 中我有:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE" />

我用这个函数来检查连接(看起来效果不错):

public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

return cm.getActiveNetworkInfo() != null &&
cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

LogCat(很长 - 完整):http://pastebin.com/EL4DREwBLogCat(简短、基本 - 开始-完成应用程序运行时):http://pastebin.com/wPYDQH3P

最佳答案

请检查您的代码网络连接代码。你可能只检查 WIFI 连接,这就是你 AsyncTask 不执行的原因,你可以使用这个

      public  static boolean getNetworkStatus(){
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = manager.getActiveNetworkInfo();
return netInfo !=null && netInfo.isConnected();
}

关于Android 通过 AsyncTask 下载文件不适用于 3G 仅适用于 Wi-Fi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com