Android DownloadManager 使用
16lz
2021-01-23
Aandroid 3.2 加入了DownloadManager ,这里举例使用方法。
layout添加两个个button,两个txtview
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/start"
- android:text="StartDownload"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="startDownload"
- />
- <Button
- android:id="@+id/query"
- android:text="QueryStatus"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="queryDownloadStatus"
- />
- <Button
- android:id="@+id/del"
- android:text="deldownload"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="delDownloads"
- />
- <TextViewandroid:id="@+id/tvsize"
- android:text="file"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <TextViewandroid:id="@+id/tvinfo"
- android:text="file"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- packagecom.download;
- importandroid.app.Activity;
- importandroid.app.DownloadManager;
- importandroid.app.DownloadManager.Request;
- importandroid.content.Intent;
- importandroid.database.Cursor;
- importandroid.net.Uri;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassDWManagerThreadextendsActivity{
- privateDownloadManagermgr=null;
- privatelonglastDownload=-1L;
- TextViewtvdwsize;
- TextViewtvdwinfo=null;
- privateStringstrUrl="http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2";
- publicstaticfinalintMSG_DWPACKSIZE=1;
- publicstaticfinalintMSG_DWSIZE=2;
- handleMessage()*/
- Handlerhandler=newHandler(){
- publicvoidhandleMessage(Messagemsg){
- //bar.incrementProgressBy(5);
- switch(msg.what){
- caseMSG_DWPACKSIZE:
- Stringsize=String.valueOf(msg.arg1);
- tvdwinfo.setText(size);
- Log.d("handleMessage","dwpacksize="+size);
- break;
- caseMSG_DWSIZE:
- Stringdwsize=String.valueOf(msg.arg1);
- tvdwsize.setText(dwsize);
- Log.d("handleMessage","dwsize="+dwsize);
- break;
- default:
- break;
- }
- }
- };
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- tvdwsize=(TextView)findViewById(R.id.tvsize);
- tvdwinfo=(TextView)findViewById(R.id.tvinfo);
- mgr=(DownloadManager)getSystemService(DOWNLOAD_SERVICE);
- }
- publicvoidstartDownload(Viewv){
- Uriuri=Uri.parse(strUrl);
- Environment
- .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
- .mkdirs();
- Requestdwreq=newDownloadManager.Request(uri);
- dwreq.setTitle("Demo");
- dwreq.setDescription("android-ndk-r6-linux-x86.tar.bz2");
- dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"android-ndk-r6-linux-x86.tar.bz2");
- dwreq.setNotificationVisibility(0);
- dwreq.setShowRunningNotification(true);
- lastDownload=mgr.enqueue(dwreq);
- }
- publicvoidqueryDownloadStatus(Viewv){
- RunnablequeryRunable=newRunnable(){
- longtotalsize=0;
- longdowsize=0;
- booleandownok=false;
- Cursorc=null;
- publicvoidrun(){
- //查询下载文件总大小
- totalsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
- Messagemsg_packsize=newMessage();
- msg_packsize.what=MSG_DWPACKSIZE;
- msg_packsize.arg1=(int)totalsize;
- handler.sendMessage(msg_packsize);
- while(downok==false){
- c=mgr.query(newDownloadManager.Query().setFilterById(lastDownload));
- if(c==null){
- //tvdwsize.setText("query=null");
- }
- else{
- c.moveToFirst();
- //查询已经下载的大小
- dowsize=c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
- if(totalsize==dowsize)downok=true;
- }
- Messagemsg=newMessage();
- msg.what=MSG_DWSIZE;
- msg.arg1=(int)dowsize;
- handler.sendMessage(msg);
- try{
- Thread.sleep(5000);
- }catch(InterruptedExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- c.close();
- }
- }//run
- };
- Threadbackground=newThread(queryRunable);
- background.start();
- }
- publicvoiddelDownloads(Viewview){
- Toast.makeText(this,"delDownloads",Toast.LENGTH_LONG).show();
- mgr.remove(lastDownload);
- }
//查看下载窗口
- publicvoidviewDownWindow(Viewv){
- startActivity(newIntent(DownloadManager.ACTION_VIEW_DOWNLOADS));
- }
- }
更多相关文章
- android改变全局字体大小
- android页面用jquery窗口大小获取错误问题的解决
- Android中计算text文字大小的几个方法
- Android的DialogFragment的基本使用方法
- Android ImageView图片自适应大小
- SpannableString的使用方法
- android图片缩放(指定大小)