2012-06-08 5 views

Antwort

3

Sie müssen HttpUrlConnection verwenden, um dies auf Android 2.2 und niedriger zu tun. Es gibt eine sehr detaillierte tutorial im Internet, die Ihnen zeigt, wie dies zu tun ist (mit einem Fortschrittsdialogfeld auch).

Erinnern Sie eine AsyncTask oder ein Thread verwenden müssen, um sicherzustellen, dass Sie während der eigentlichen Download der UI-Thread nicht blockieren!

+0

Danke, aber "Wie kann ich Dateien mit Standard-Android-Downloader herunterladen?". Ich denke, ich sollte meine eigene Lösung verwenden. – Kermia

+1

Wenn Sie an einem Gerät arbeiten, auf dem Android 2.2 oder niedriger ausgeführt wird, können Sie dies nicht tun. Der Standard-Downloader wurde in 2.3 eingeführt und wird daher in früheren Versionen nicht erkannt. –

17

Hier gehen Sie.

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

Vergessen Sie nicht, android.permission.internet in Manifest hinzuzufügen.

+0

große Antwort. eigentlich wusste ich gar nicht, dass ein solcher service existiert. ist es eine klebrige Sendung? –

+0

Sorry nicht sicher darüber :). Sie können diese Antwort akzeptieren, wenn es Ihr Problem löst, wie es anderen helfen wird :) –

+0

Ich würde die Antwort akzeptieren. aber - ich bin nicht derjenige, der die Frage postet ... aber ich bin derjenige, der die Antwort abstimmt –

3

Wenn Sie es von einer URL auf die SD-Karte des Benutzers herunterladen möchten, können Sie es einfach im Standard-Internetbrowser des Telefons öffnen.

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)

Der Android-Browser wird dann gestartet und die Datei (in diesem Fall ein Bild) wird heruntergeladen werden.

+0

In meinem sony xepria phone. Das Bild wird im Browser selbst angezeigt. Was ich will ist nach feuern Absicht, wenn der Download beginnt, sollte es zu meiner App bewegen. –

+0

Wenn Sie versuchen, ein Bild herunterzuladen, öffnet der Browser das Bild und zeigt es an. Diese Methode ist für Binärdateien wie .zip gedacht. Ich empfehle Ihnen, Vipul Shahs Lösung zu verwenden. –

+0

Funktioniert es, wenn ich eine APK-Datei herunterlade? –

0

Ja, Sie können den Netzwerkbetrieb im Hauptthread nicht ausführen. Sie können bis zum this Repository suchen, um die Datei herunterzuladen.

+1

Hallo Amit, vielleicht kannst du [hier] (http://stackoverflow.com/help/promotion) nachsehen – bummi

Verwandte Themen