android APK更新主要代码
2016-01-12 10:23
357 查看
DownloadManager downloadManager;
/**下载APK**/
public void downloadApk(String apkUrl) {
if(apkUrl==null||!(apkUrl.startsWith("http://")||apkUrl.startsWith("https://"))){
toastMsg("下载地址出错了,可尝试到官网下载");
return;
}
Uri uri = Uri.parse(apkUrl);
if(downloadManager==null)
downloadManager = (DownloadManager) getSystemService(Service.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
// 设置允许使用的网络类型,这里是移动网络和wifi都可以
request.setAllowedNetworkTypes( DownloadManager.Request.NETWORK_MOBILE| DownloadManager.Request.NETWORK_WIFI);
//设置是否允许漫游
request.setAllowedOverRoaming(false);
//设置文件类型
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apkUrl));
request.setMimeType(mimeString);
//在通知栏中显示
request.setNotificationVisibility( DownloadManager.Request.VISIBILITY_VISIBLE);
request.setTitle(getResources().getText(R.string.app_name)+"下载中...");
request.setVisibleInDownloadsUi(true);
//sdcard目录下的download文件夹
File file=new File(LegworkApplication.mBasePath+"file");
if(!file.exists()){
file.mkdirs();
}
File file2=new File(file, "test.apk");
request.setDestinationUri(Uri.fromFile(file2));
// 将下载请求放入队列
downloadId= downloadManager.enqueue(request);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(downloadCompleteReceiver);
}
private long downloadId;
private BroadcastReceiver downloadCompleteReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if(downloadId==reference){
/**下载完成后安装APK**/
installApk();
}
}
};
private void installApk() {
Intent i = new Intent(Intent.ACTION_VIEW);
String filePath = getDownloadFileName();
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
startActivity(i);
}
private String getDownloadFileName(){
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadId);
Cursor c = downloadManager.query(query);
if(c.moveToFirst()) {
return c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
}
return null;
}
/**注册下载完成广播**/
registerReceiver(downloadCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
/**下载APK**/
public void downloadApk(String apkUrl) {
if(apkUrl==null||!(apkUrl.startsWith("http://")||apkUrl.startsWith("https://"))){
toastMsg("下载地址出错了,可尝试到官网下载");
return;
}
Uri uri = Uri.parse(apkUrl);
if(downloadManager==null)
downloadManager = (DownloadManager) getSystemService(Service.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
// 设置允许使用的网络类型,这里是移动网络和wifi都可以
request.setAllowedNetworkTypes( DownloadManager.Request.NETWORK_MOBILE| DownloadManager.Request.NETWORK_WIFI);
//设置是否允许漫游
request.setAllowedOverRoaming(false);
//设置文件类型
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apkUrl));
request.setMimeType(mimeString);
//在通知栏中显示
request.setNotificationVisibility( DownloadManager.Request.VISIBILITY_VISIBLE);
request.setTitle(getResources().getText(R.string.app_name)+"下载中...");
request.setVisibleInDownloadsUi(true);
//sdcard目录下的download文件夹
File file=new File(LegworkApplication.mBasePath+"file");
if(!file.exists()){
file.mkdirs();
}
File file2=new File(file, "test.apk");
request.setDestinationUri(Uri.fromFile(file2));
// 将下载请求放入队列
downloadId= downloadManager.enqueue(request);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(downloadCompleteReceiver);
}
private long downloadId;
private BroadcastReceiver downloadCompleteReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if(downloadId==reference){
/**下载完成后安装APK**/
installApk();
}
}
};
private void installApk() {
Intent i = new Intent(Intent.ACTION_VIEW);
String filePath = getDownloadFileName();
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
startActivity(i);
}
private String getDownloadFileName(){
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadId);
Cursor c = downloadManager.query(query);
if(c.moveToFirst()) {
return c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
}
return null;
}
/**注册下载完成广播**/
registerReceiver(downloadCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
相关文章推荐
- 详解Android文件存储
- Android-Service生命周期
- android开发 防止输入键盘挡住界面
- Android的Window类
- Android 全屏沉浸模式(支持API 19及以上系统)
- android 三级缓存
- android 开发文档(sdk)中docs不能搜索
- android代码混淆和打包签名
- Android dimen
- android用户界面之一
- 实例详解Android文件存储数据方式
- 如何使用Android最新的RecyclerView取代ListView?
- Android内存泄漏终极解决篇(下)
- Android开发组件
- Android实战技巧:深入解析AsyncTask
- Android中使用NDK环境开发JNI程序例子
- Android事件散发机制
- Android 在Fragment中使用TabLayout时标题不显示问题
- 如何使用Android最新的RecyclerView取代ListView?
- Android 对话框(Dialog)大全 建立你自己的对话框