Android下载app完成后自动安装
2016-07-14 11:08
435 查看
直接上代码了
public class MainActivity extends Activity {
private DownloadManager dowanloadmanager = null;
private DownloadChangeObserver downloadObserver;
private long lastDownloadId = 0;
public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads");
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String serviceString = Context.DOWNLOAD_SERVICE;
dowanloadmanager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://filelx.liqucn.com/upload/2014/sheji/ms_hdl_daiji_lq_20140811.apk");
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).mkdir();
lastDownloadId = dowanloadmanager.enqueue(new DownloadManager.Request(uri).setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
| DownloadManager.Request.NETWORK_WIFI).setAllowedOverRoaming(false).setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, "test.apk"));
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
downloadObserver = new DownloadChangeObserver(null);
getContentResolver().registerContentObserver(CONTENT_URI, true,downloadObserver);
}
class DownloadChangeObserver extends ContentObserver {
public DownloadChangeObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
queryDownloadStatus();
}
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 这里可以取得下载的id,这样就可以知道哪个文件下载完成了。适用与多个下载任务的监听
long myDwonloadID = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (lastDownloadId == myDwonloadID) {
try {
String serviceString = Context.DOWNLOAD_SERVICE;
DownloadManager dManager = (DownloadManager) context
.getSystemService(serviceString);
Intent install = new Intent(Intent.ACTION_VIEW);
Uri downloadFileUri = dManager.getUriForDownloadedFile(myDwonloadID);
install.setDataAndType(downloadFileUri,"application/vnd.android.package-archive");
install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(install);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.e("异常", "install error ", e);
}
}
queryDownloadStatus();
}
};
private void queryDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(lastDownloadId);
Cursor c = dowanloadmanager.query(query);
if (c != null && c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
int reasonIdx = c.getColumnIndex(DownloadManager.COLUMN_REASON);
int titleIdx = c.getColumnIndex(DownloadManager.COLUMN_TITLE);
int fileSizeIdx = c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
int bytesDLIdx = c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
String title = c.getString(titleIdx);
int fileSize = c.getInt(fileSizeIdx);
int bytesDL = c.getInt(bytesDLIdx);
// Translate the pause reason to friendly text.
int reason = c.getInt(reasonIdx);
StringBuilder sb = new StringBuilder();
sb.append(title).append("\n");
sb.append("Downloaded ").append(bytesDL).append(" / ")
.append(fileSize);
// Display the status
Log.d("tag", sb.toString());
switch (status) {
case DownloadManager.STATUS_PAUSED:
Log.v("tag", "STATUS_PAUSED");
case DownloadManager.STATUS_PENDING:
Log.v("tag", "STATUS_PENDING");
case DownloadManager.STATUS_RUNNING:
// 正在下载,不做任何事情
Log.v("tag", "STATUS_RUNNING");
break;
case DownloadManager.STATUS_SUCCESSFUL:
// 完成
Log.v("tag", "下载完成");
// dowanloadmanager.remove(lastDownloadId);
break;
case DownloadManager.STATUS_FAILED:
// 清除已下载的内容,重新下载
Log.v("tag", "STATUS_FAILED");
dowanloadmanager.remove(lastDownloadId);
break;
}
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(receiver);
getContentResolver().unregisterContentObserver(downloadObserver);
}
public class MainActivity extends Activity {
private DownloadManager dowanloadmanager = null;
private DownloadChangeObserver downloadObserver;
private long lastDownloadId = 0;
public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads");
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String serviceString = Context.DOWNLOAD_SERVICE;
dowanloadmanager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://filelx.liqucn.com/upload/2014/sheji/ms_hdl_daiji_lq_20140811.apk");
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).mkdir();
lastDownloadId = dowanloadmanager.enqueue(new DownloadManager.Request(uri).setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
| DownloadManager.Request.NETWORK_WIFI).setAllowedOverRoaming(false).setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, "test.apk"));
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
downloadObserver = new DownloadChangeObserver(null);
getContentResolver().registerContentObserver(CONTENT_URI, true,downloadObserver);
}
class DownloadChangeObserver extends ContentObserver {
public DownloadChangeObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
queryDownloadStatus();
}
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 这里可以取得下载的id,这样就可以知道哪个文件下载完成了。适用与多个下载任务的监听
long myDwonloadID = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (lastDownloadId == myDwonloadID) {
try {
String serviceString = Context.DOWNLOAD_SERVICE;
DownloadManager dManager = (DownloadManager) context
.getSystemService(serviceString);
Intent install = new Intent(Intent.ACTION_VIEW);
Uri downloadFileUri = dManager.getUriForDownloadedFile(myDwonloadID);
install.setDataAndType(downloadFileUri,"application/vnd.android.package-archive");
install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(install);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.e("异常", "install error ", e);
}
}
queryDownloadStatus();
}
};
private void queryDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(lastDownloadId);
Cursor c = dowanloadmanager.query(query);
if (c != null && c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
int reasonIdx = c.getColumnIndex(DownloadManager.COLUMN_REASON);
int titleIdx = c.getColumnIndex(DownloadManager.COLUMN_TITLE);
int fileSizeIdx = c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
int bytesDLIdx = c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
String title = c.getString(titleIdx);
int fileSize = c.getInt(fileSizeIdx);
int bytesDL = c.getInt(bytesDLIdx);
// Translate the pause reason to friendly text.
int reason = c.getInt(reasonIdx);
StringBuilder sb = new StringBuilder();
sb.append(title).append("\n");
sb.append("Downloaded ").append(bytesDL).append(" / ")
.append(fileSize);
// Display the status
Log.d("tag", sb.toString());
switch (status) {
case DownloadManager.STATUS_PAUSED:
Log.v("tag", "STATUS_PAUSED");
case DownloadManager.STATUS_PENDING:
Log.v("tag", "STATUS_PENDING");
case DownloadManager.STATUS_RUNNING:
// 正在下载,不做任何事情
Log.v("tag", "STATUS_RUNNING");
break;
case DownloadManager.STATUS_SUCCESSFUL:
// 完成
Log.v("tag", "下载完成");
// dowanloadmanager.remove(lastDownloadId);
break;
case DownloadManager.STATUS_FAILED:
// 清除已下载的内容,重新下载
Log.v("tag", "STATUS_FAILED");
dowanloadmanager.remove(lastDownloadId);
break;
}
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(receiver);
getContentResolver().unregisterContentObserver(downloadObserver);
}
相关文章推荐
- Android第三十三天
- Android提高第二篇之SurfaceView的基本使用
- 你应该知道的2016年有关App开发的技术创新
- ListView单选多选
- 3种日志类型,微信付款反馈-->写入txt日志
- Android Activity生命周期及状态变化所调用方法
- Android之使用RecyclerView异常情况
- android 系统相关 action大全
- 【Android】android studio一键生成快速开发实现语言国际化
- iOS8新特性--WKWebView详解
- Android提高第一篇之MediaPlayer
- Android 自定义View实现竖直跑马灯效果
- StandardWrapper.Throwable 錯誤
- Android开发。。。。
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- android 相机与图库的简单应用
- How to disable gradle 'offline mode' in android studio?
- web开发常见故障处理(二)之表没有mapped
- Fragment生命周期
- android几种常见弹出窗口实现