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.
- Cómo detener un IntentService mientras hay muchos IntentService en ejecución
- Descargar vídeo de Url con Retrofit
- Solicitud de HttpClient simultánea utilizando varias AsyncTasks
- ¿Cómo descargar el archivo con el servicio en android?
- Descargar .apk se convierte en .txt en el teléfono
¿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
- Android - ¿Cómo descargar una imagen y usarla como nuevo recurso?
- PARTIAL_WAKE_LOCK vs SCREEN_DIM_WAKE_LOCK en el subproceso de descarga
- La descarga de WebView abre la ventana del navegador por un breve momento antes de volver a WebView
- Cómo abrir el archivo descargado en android con la aplicación predeterminada predeterminada en android
- ¿Cómo puedo usar Android para descargar un archivo basado en sesión / cookie usando webView?
- Android sync / descargar marco
- Cómo descargar de forma programática una página HTML en android y obtener su Html?
- Descargar un archivo con DefaultHTTPClient y autenticación preventiva
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(); }