DownloadManager使用
来源:互联网 发布:vb as boolean 编辑:程序博客网 时间:2024/05/09 21:58
前一章写到使用HttpUrlConnection或HttpClient做APP下载更新,这章来说下DownloadManager。
DownloadManager系统下载管理的使用
主要代码
public class MainActivity extends Activity implements android.view.View.OnClickListener {private static final String TAG = "MainActivity";private Button startBtn, pauseBtn, stopBtn;private TextView mInfoText;private DownloadManager mDownloadManager;private String path = "http://dldir1.qq.com/weixin/android/weixin602android520.apk";private BroadcastReceiver mReceiver;private long downloadId;private ApplicationsIntentReceiver mApplicationsReceiver = new ApplicationsIntentReceiver();@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);startBtn = (Button) findViewById(R.id.start_download);pauseBtn = (Button) findViewById(R.id.btn_query);stopBtn = (Button) findViewById(R.id.btn_del);mInfoText = (TextView) findViewById(R.id.download_info);startBtn.setOnClickListener(this);pauseBtn.setOnClickListener(this);stopBtn.setOnClickListener(this);mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if (TextUtils.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE, action)) {long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);if (downloadId == reference) {mInfoText.setText("下载结束");mInfoText.setTextColor(Color.RED);mInfoText.setTextSize(30);}} else if (TextUtils.equals(DownloadManager.ACTION_NOTIFICATION_CLICKED, action)) {String extraID = DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS;long[] references = intent.getLongArrayExtra(extraID);for (long reference : references)if (reference == downloadId) {DownloadView();}}}};IntentFilter mFilter = new IntentFilter();mFilter.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE);mFilter.addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED);registerReceiver(mReceiver, mFilter);registerIntentReceivers();}private void registerIntentReceivers() {IntentFilter filter;filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);filter.addAction(Intent.ACTION_PACKAGE_REMOVED);filter.addAction(Intent.ACTION_PACKAGE_CHANGED);filter.addDataScheme("package");registerReceiver(mApplicationsReceiver, filter);}/** * Receives notifications when applications are added/removed. */private class ApplicationsIntentReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {{Log.i(TAG, "============================RETURN VALUE ");if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {Uri uri = null;uri = intent.getData();Log.i(TAG, "+++++++++++++++++++++++RETURN VALUE " + uri);} else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {Uri uri = null;uri = intent.getData();Log.i(TAG, "----------------------------RETURN VALUE " + uri);}}}}private void DownloadView() {startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubint id = v.getId();switch (id) {case R.id.start_download:mInfoText.setText("开始下载");mInfoText.setTextSize(30);Uri uri = Uri.parse(path);DownloadManager.Request request = new DownloadManager.Request(uri);// SDK 11以上可以使用, 允许扫描,在Download中显示// request.allowScanningByMediaScanner();// 设置允许下载网络类型:WIFI或者 3Grequest.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);// 设置Notification 通知信息request.setDescription("正在下载apk");String filename = path.substring(path.lastIndexOf("/") + 1);// 文件下载保存目录request.setDestinationInExternalFilesDir(getApplicationContext(), null, filename);// 设置下载中Notification显示如果使用DownloadManager.Request.VISIBILITY_HIDDEN 需要加入权限// android.permission.DOWNLOAD_WITHOUT_NOTIFICATION// SDK 11 以上可以使用// DownloadManager.Request.VISIBILITY_HIDDEN// DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED// DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETIONrequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);// 设置Notification Title// request.setShowRunningNotification(true);request.setTitle("下载");// 加入下载队列downloadId = mDownloadManager.enqueue(request);break;case R.id.btn_query:DownloadManager.Query query = new DownloadManager.Query();query.setFilterById(downloadId);Cursor cursor = mDownloadManager.query(query);if (cursor == null) {mInfoText.setText("没有数据");mInfoText.setTextSize(30);} else {if (cursor.moveToFirst()) {// 查询已经下载的大小long downsize = cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));String desc = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_DESCRIPTION));String time = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP));String fn = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));String localUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));String mediaType = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_MEDIA_TYPE));String mediaUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_MEDIAPROVIDER_URI));int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));String title = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE));long totalSize = cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));StringBuilder sb = new StringBuilder();sb.append("downsize = " + downsize).append("\n");sb.append("desc = " + desc).append("\n");sb.append("time = " + time).append("\n");sb.append("fn = " + fn).append("\n");sb.append("localUri = " + localUri).append("\n");sb.append("mediaType = " + mediaType).append("\n");sb.append("mediaUri = " + mediaUri).append("\n");sb.append("reason = " + reason).append("\n");sb.append("status = " + status).append("\n");sb.append("title = " + title).append("\n");sb.append("totalSize = " + totalSize);mInfoText.setText(sb.toString());mInfoText.setTextSize(20);}}break;case R.id.btn_del:// 取消和删除下载mDownloadManager.remove(downloadId);break;default:break;}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (null != mReceiver) {unregisterReceiver(mReceiver);unregisterReceiver(mApplicationsReceiver);}}}
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@id/start_download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@string/start" /> <Button android:id="@id/btn_query" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@string/query" /> <Button android:id="@id/btn_del" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="@string/del" /> </LinearLayout> <TextView android:id="@id/download_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/margin"/></LinearLayout>配置文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.me.downloadmanager" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/download"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application></manifest>
它在使用上很方便,帮我们把所有的事情都处理完了,在项目开发使用于可以根据需要来,不是特别需要自己处理的,那么可以直接使用DownloadManager。
0 0
- DownloadManager使用
- DownloadManager使用
- Android DownloadManager 的使用
- DownloadManager使用技巧
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- DownloadManager的使用
- DownloadManager的使用
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- 使用DownloadManager 自动更新apk
- Android DownloadManager 的使用
- DownloadManager的使用
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- Windows Socket 1.1库函数大全
- java解析Excel
- 六角填数
- 支付宝SDK---openssl rsa.h file not found
- ByteBuffer的mark、position、limit、flip、reset,get方法介绍
- DownloadManager使用
- VC++6.0环境下用ODBC连接SQL Server数据库的简单例子
- python regular expressions re.match VS re.search
- 黑马程序员Android第55期——Cookie/session
- lodrunner中标准偏差值std总结
- [LeetCode]Scramble String
- GTK进阶学习:事件盒子
- Kaggle项目实战1——Digit Recognizer——排名Top10%
- xcode6创建空白工程