JavaのDownloadManagerを使ってみます。

ダウンロード完了をBroadcastReceiverで検知して、Toastでメッセージを出してみます。

フルJavaでマルチダウンローダーを作る前段です。



コード

ダウンロード場所は2つ。

SDカードのパッケージ対応のフォルダーとDownloadフォルダー。

こんな感じ。





ダウンロード完了後、メッセージを出します、こんな感じ。





今回はJavaのみ使うので、Eclipse起動後、新しいプロジェクトを1個作成。

以下はコード

AndroidMnifest.xml

以下のコードを記述しておく。

<uses-permission android:name="android.permission.INTERNET" />




メインのActivity

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{
                //
            
            }
            
        }
    };
    
    
    
}


TOP