DownloadManagerのちょっとマニアックな使い方
実装
Uri uri = Uri.parse("https://www.example.com/project/attachment/screenshot.png"); DownloadManager.Request r = new DownloadManager.Request(uri); // 通知バーのところに表示される名前 r.setTitle("テスト - screenshot.jpg"); // 実際に保存されるファイル名 r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "screenshot.jpg"); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { //メディアスキャンを許可する(ギャラリーアプリとかで参照可能になる) r.allowScanningByMediaScanner(); //ダウンロード中・ダウンロード完了時にも通知を表示する r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } //カスタムヘッダーを定義する //ここでCookieとかするとセッション情報を引き回せるかもしれない(未検証) r.addRequestHeader("X-Custom-API-Key","CuSTomapiKey"); //Basic認証用のヘッダーを付与する String auth = "BasicUserId" + ":" + "BasicUserPassword"; String base64 = Base64.encodeToString(auth.getBytes(), Base64.NO_WRAP); r.addRequestHeader("Authorization", "Basic " + base64); //ダウンロード開始 DownloadManager dm = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE); dm.enqueue(r);
諸注意
上記コードはAPI9以降および、API11以降の機能を使用するため、対象メソッドには以下の記載が必須なので、注意が必要。
@SuppressLint("NewApi") @TargetApi(Build.VERSION_CODES.GINGERBREAD)
また、以下の権限が必要となる。これがないと、キューに投入したときに例外が発生する。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
参考文献
- DownloadManager | Android Developers (英語)
- http://techbooster.jpn.org/andriod/application/2199/
- ダウンロード後のファイルの取得方法等についての解説あり
- Androidのダウンロードマネージャで柔軟なダウンロードを! - Taste of Tech Topics
- そのほかいろいろな設定がある模様