2012-06-08 10 views

Respuesta

3

Necesita usar HttpUrlConnection para hacer esto en Android 2.2 y versiones posteriores. Hay un muy detallado tutorial en Internet que le muestra cómo hacerlo (con un cuadro de diálogo de progreso también).

Recuerde que debe utilizar un AsyncTask o una Thread para asegurar que no bloquear el hilo de interfaz de usuario durante la descarga real!

+0

Gracias, pero "¿Cómo puedo descargar archivos usando el descargador predeterminado de Android?". Creo que debería usar mi propia solución. – Kermia

+1

Si está trabajando en un dispositivo que ejecuta Android 2.2 o versiones posteriores, no puede. El descargador predeterminado se introdujo en 2.3 y, por lo tanto, las versiones anteriores no lo reconocerán. –

17

Aquí tienes.

import android.app.Activity; 
import android.app.DownloadManager; 
import android.app.DownloadManager.Query; 
import android.app.DownloadManager.Request; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageView; 

public class DownloadManagerActivity extends Activity { 
    private long enqueue; 
    private DownloadManager dm; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String action = intent.getAction(); 
       if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
        long downloadId = intent.getLongExtra(
          DownloadManager.EXTRA_DOWNLOAD_ID, 0); 
        Query query = new Query(); 
        query.setFilterById(enqueue); 
        Cursor c = dm.query(query); 
        if (c.moveToFirst()) { 
         int columnIndex = c 
           .getColumnIndex(DownloadManager.COLUMN_STATUS); 
         if (DownloadManager.STATUS_SUCCESSFUL == c 
           .getInt(columnIndex)) { 

          ImageView view = (ImageView) findViewById(R.id.imageView1); 
          String uriString = c 
            .getString(c 
              .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
          view.setImageURI(Uri.parse(uriString)); 
         } 
        } 
       } 
      } 
     }; 

     registerReceiver(receiver, new IntentFilter(
       DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
    } 

    public void onClick(View view) { 
     dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
     Request request = new Request(
       Uri.parse("url for file to download")); 
     enqueue = dm.enqueue(request); 

    } 

    public void showDownload(View view) { 
     Intent i = new Intent(); 
     i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); 
     startActivity(i); 
    } 
} 

No olvides agregar android.permission.internet en manifiesto.

+0

excelente respuesta. De hecho, no sabía que existiera ese servicio. ¿es una emisión pegajosa? –

+0

Lo sentimos, no estoy seguro al respecto :). Puede aceptar esta respuesta si resuelve su problema, ya que ayudará a los demás :) –

+0

Acepto la respuesta. pero - no soy el que publica la pregunta ... pero yo soy el que mejoró la respuesta –

3

Si desea descargarlo en la tarjeta SD del usuario desde una URL, puede simplemente abrirlo en el navegador de Internet predeterminado del teléfono.

String url = "https://appharbor.com/assets/images/stackoverflow-logo.png"; 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setData(Uri.parse(url)); 
startActivity(i); 

(Code from this question)

el navegador de Android continuación, se iniciará y el archivo (en este caso una imagen) se descargará.

+0

En Mi teléfono Sony xepria, la imagen se muestra en el navegador en sí. Lo que deseo es que después del intento de disparar cuando comience la descarga, se mueva a mi aplicación. –

+0

Si está intentando descargar una imagen, el navegador abrirá la imagen y la verá. Este método está destinado a archivos binarios como .zip. Te recomiendo que uses la solución de Vipul Shah. –

+0

¿Funcionará si descargo un archivo apk? –

0

Sí, no puede realizar el funcionamiento de la red en el hilo principal. Puede consultar el repositorio this para descargar el archivo.

+1

Hola Amit, quizás puedas echar un vistazo [aquí] (http://stackoverflow.com/help/promotion) – bummi

Cuestiones relacionadas