4

私はそれについてたくさん検索しましたが、答えは見つかりませんでした。

ファイルをダウンロードしたい(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;
 }
}

主な活動から..

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/EL4DREwB LogCat (短い、必須 - 最初から最後までのアプリ ランタイム): http://pastebin.com/wPYDQH3P

4

1 に答える 1

0

コード ネットワーク接続コードを確認してください。AsyncTask を実行しない理由として、WIFI 接続のみを確認することができます。これを使用することができます。

      public  static boolean getNetworkStatus(){
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = manager.getActiveNetworkInfo();
    return netInfo !=null && netInfo.isConnected();
} 
于 2012-09-19T18:11:52.220 に答える