ファイルのダウンロードを実現するなら、DownloadManagerを使うという方法もある・・・。
DownloadManager | Android Developers
activity_main.xmlは、
edittext1がURL入力用・・・。
button1でダウンロードのリクエストを投げる・・・。
BroadcastReceiverの派生クラス、DownloadReceiverを追加・・・。
MainActivity型のmainActivityをメンバとして持ち、コンストラクタの引数からもらってる・・・。
onReceiveでは、intent.getActionで取得したactionがACTION_DOWNLOAD_COMPLETE(ダウンロード完了)だった場合のみ考える・・・。
intentからintent.getLongExtraでDownloadManager.EXTRA_DOWNLOAD_IDをキーとする値を取得・・・。
これがダウンロードID・・・。
DownloadManager.Queryオブジェクトqueryを作成したら、query.setFilterByIdにダウンロードIDを渡す・・・。
このダウンロードIDをもとにqueryメソッドでフィルタリングをかける・・・。
Cursor型cの指す位置で、さらにカラムがDownloadManager.COLUMN_STATUSの値、つまりstatusを取得・・・。
statusがSTATUS_SUCCESSFULなら、Toastを表示・・・。
MainActivityは、
メンバにDownloadManager型downloadManager・・・。
getSystemServiceでDOWNLOAD_SERVICEを指定して、downloadManagerに格納・・・。
edittext1からurlもらったら、Uri.parseでUri型のdownloadUriに・・・。
downloadUri.getLastPathSegmentで、ファイル名だけ取り出してdownloadFilename・・・。
downloadUriは、DownloadManager.Requestオブジェクト生成時のコンストラクタに渡して、インスタンスはrequestに・・・。
request.setDestinationInExternalFilesDirでダウンロード先を指定・・・。
request.setTitleでタイトル、request.setAllowedNetworkTypesでネットワーク、request.setMimeTypeでMIMEタイプを指定・・・。
DownloadReceiverのコンストラクタにはthisを渡している・・・。だからmainActivityメンバがいる・・・。
registerReceiverでdownloadReceiverとACTION_DOWNLOAD_COMPLETEを拾うIntentFilterのインスタンスを登録・・・。
これでACTION_DOWNLOAD_COMPLETEしたら、onReceiveに行く・・・。
あとは、downloadManager.enqueueでrequestを投げればダウンロードが開始される・・・。
で、
と入力したら、Button1を押す・・・。
通知画面を見ると、ダウンロードのプログレスバーが走っていて、
終わったら、トーストが出る・・・。