Android Descargar File by AsyncTask no funciona con 3G solo con Wi-Fi

He buscado mucho sobre eso, pero no se encontraron respuestas.

Quiero descargar un archivo (dando url, destino y nombre de archivo). Tengo una clase que extiende la clase AsyncTast. Funciona bien con la conexión Wi-Fi, pero no funciona con datos móviles (G, 3g, H)! No puedo entender por qué, me estoy volviendo loco.

¿Puede alguien tener mi mismo problema o similar? ¡Gracias!

Publico mi código a continuación. Gracias

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; } } 

De la actividad principal ..

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

En el directorio de destino SOMETIMES encontré el archivo pero no se ha descargado completamente o es 0 kB ..

En AndroidManifest.xml tengo:

 <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" /> 

Utilizo esta función para la conexión del cheque (parece funcionar bien):

 public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting(); } 

LogCat (muy largo – completo): http://pastebin.com/EL4DREwB LogCat (corto, esencial – tiempo de ejecución de la aplicación de inicio): http://pastebin.com/wPYDQH3P

compruebe su código código de conectividad de red. usted puede comprobar solamente para la conectividad de WIFI, ese porqué usted AsyncTask no ejecuta, usted puede utilizar esto

  public static boolean getNetworkStatus(){ ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = manager.getActiveNetworkInfo(); return netInfo !=null && netInfo.isConnected(); } 
  • Cómo detener un IntentService?
  • ¿Cómo descargar archivos (pdf, doc etc ...) en sdcard y abrir el archivo utilizando volley en android?
  • Barra de progreso de la actualización en listview para archivos múltiples descarga
  • Descargar y guardar imágenes con Picasso
  • ¿Dónde puedo descargar la documentación de Android SDK?
  • ¿Cómo puedo descargar un archivo a mi carpeta de descargas android
  • Android 2.2 y 2.3 descarga de PDF a través de HTTPS parece roto
  • ¿Dónde puedo descargar los documentos de la API para Android?
  • Cómo instalar APK automáticamente cuando se completa la descarga del archivo (alojado en privado)
  • Descarga de archivos en Android
  • ¿Cómo utilizo DownloadListener?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.