2012-06-08 14 views

risposta

3

È necessario utilizzare HttpUrlConnection per eseguire questa operazione su Android 2.2 e versioni successive. C'è uno tutorial molto dettagliato su internet che mostra come farlo (con una finestra di dialogo di avanzamento).

ricordo di te necessario utilizzare unAsyncTask o un Thread per garantire che non bloccare il thread dell'interfaccia utente durante il download vero e proprio!

+0

Grazie, ma "Come posso scaricare i file utilizzando il downloader predefinito di Android?". Penso che dovrei usare la mia soluzione. – Kermia

+1

Se si sta lavorando su un dispositivo con Android 2.2 o versioni successive, non è possibile. Il downloader predefinito è stato introdotto in 2.3 e quindi le versioni precedenti non lo riconosceranno. –

17

Qui si va.

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

Non dimenticare di aggiungere android.permission.internet in manifest.

+0

ottima risposta. in realtà non sapevo che un tale servizio esistesse. è una trasmissione appiccicosa? –

+0

Spiacente, non ne sono sicuro :) Puoi accettare questa risposta se risolve il tuo problema, in quanto aiuterà gli altri :) –

+0

Accetterei la risposta. ma - non sono io quello che ha posto la domanda ... ma io sono quello che ha votato la risposta –

3

Se si desidera scaricarlo sulla scheda SD dell'utente da un URL, è sufficiente aprirlo nel browser Internet predefinito del telefono.

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)

Il browser Android sarà quindi avviare e il file (in questo caso un'immagine) verranno scaricati.

+0

In My sony xepria phone the.The l'immagine è mostrata nel browser stesso. Quello che voglio è dopo l'attivazione dell'intento all'avvio del download dovrebbe spostarsi nella mia app. –

+0

Se stai provando a scaricare un'immagine, il browser aprirà l'immagine e la visualizzerà. Questo metodo è pensato per file binari come .zip. Vi consiglio di usare la soluzione di Vipul Shah. –

+0

Funzionerà se sto scaricando un file apk? –

0

Sì, non è possibile eseguire operazioni di rete nella thread principale. Puoi cercare fino al repository this per scaricare il file.

+1

Ciao Amit, forse puoi dare un'occhiata [qui] (http://stackoverflow.com/help/promotion) – bummi

Problemi correlati