JavaのDownloadManagerを使ってファイルをダウンロード
ダウンロード場所は2つ。
SDカードのパッケージ対応のフォルダーとDownloadフォルダー。
こんな感じ。
ダウンロード完了後、メッセージを出します、こんな感じ。
今回はJavaのみ使うので、Eclipse起動後、新しいプロジェクトを1個作成。
以下はコード
【AndroidMnifest.xml】
以下のコードを記述しておく。
<uses-permission android:name="android.permission.INTERNET" />
package com.kddi.satch.downloadmanager; import java.io.File; import android.app.Activity; import android.os.Bundle; import android.app.DownloadManager; import android.content.Context; import android.net.Uri; import android.os.Environment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.content.BroadcastReceiver; import android.content.Intent; import android.content.IntentFilter; import android.widget.Toast; public class DownloadManagerSampleActivity extends Activity { //menu private static final int MENU_DESTINATION_EXTERNAL_DIR = 0; private static final int MENU_DESTINATION_EXTERNAL_PUBLICDIR = 1; DownloadManager mDownloadManager; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mDownloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); } public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, MENU_DESTINATION_EXTERNAL_DIR,0, "sdcard/Android/data/<packageID>/files/Download"); menu.add(0, MENU_DESTINATION_EXTERNAL_PUBLICDIR,0, "sdcard/Download"); return true; } public boolean onOptionsItemSelected(MenuItem item) { Uri uri = Uri.parse("http://wisteriahill.sakura.ne.jp/dummy.jpg"); DownloadManager.Request mRequest = new DownloadManager.Request(uri); //以下のパラメータにはNETWORK_MOBILEとNETWORK_WIFIの両方を指定。 //NETWORK_WIFIが無いとWi-Fiのみサポートしている機種の場合、 //いつまでたってもダウンロードが始まらない(見た目、終わらない)... //ということになってしまう。 mRequest.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI); mRequest.setTitle("Test Download!"); mRequest.setDescription("sample of using download manager"); long downloadId = 0; switch ( item.getItemId() ) { case MENU_DESTINATION_EXTERNAL_DIR: Log.i("MENU","EXTERNAL_DIR"); mRequest.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS, "dummy.jpg"); File pathExternalDir = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); pathExternalDir.mkdirs(); mRequest.setShowRunningNotification(true); mRequest.setVisibleInDownloadsUi(true); downloadId = mDownloadManager.enqueue(mRequest); return true; case MENU_DESTINATION_EXTERNAL_PUBLICDIR: mRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "dummy.jpg"); File pathExternalPublicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); pathExternalPublicDir.mkdirs(); mRequest.setShowRunningNotification(true); mRequest.setVisibleInDownloadsUi(true); downloadId = mDownloadManager.enqueue(mRequest); return true; } return false; } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); registerReceiver(downloadReceiver, intentFilter); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); unregisterReceiver(downloadReceiver); } private BroadcastReceiver downloadReceiver = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub String action = arg1.getAction(); int res = action.indexOf("DOWNLOAD_COMPLETE"); if (res != -1){ Toast.makeText(DownloadManagerSampleActivity.this, "Download complete!", Toast.LENGTH_LONG).show(); }else{ // } } }; }