使用DownloadManager 自动更新apk
来源:互联网 发布:java细粒度数据级权限 编辑:程序博客网 时间:2024/05/18 01:42
添加DownloadManager 权限
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在onCreate中
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
检查更新的方法,activity中调用。
public void checkUpdate(Context context) {
try {
int curVer = getPackageManager().getPackageInfo(packageName, 0).versionCode;
//读取远端配置的版本信息。
JSONObject resource = config.getJSONObject("resources");
int newVer = resource.getInt("versionCode");
Log.d(TAG, String.format("checkUpdate curVer:%1$s newVer:%2$s", curVer, newVer));
//比较版本
if (curVer >= newVer) {
return;
}
//取得远端的apk下载路径
final String downUri = resource.getString("downloadUri");
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("软件更新");
builder.setMessage("检测到新版本,是否下载更新?");
builder.setPositiveButton("更新", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//开始下载。
downNewApk(downUri);
}
});
// 稍后更新
builder.setNegativeButton("稍后更新", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
} catch (Exception e) {
e.printStackTrace();
}
}
//使用downloadmanager下载apk的方法.
private void downNewApk(String downUri) {
//初始化下载的request
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downUri));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
request.setAllowedOverRoaming(false);
//设置文件类型
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(downUri));
request.setMimeType(mimeString);
//在通知栏中显示
// request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setShowRunningNotification(true);
// request.setVisibleInDownloadsUi(true);
//sdcard的目录下的download文件夹
//设置下载目录到sdcard download文件夹,自定义文件名,注意如果有同名文件系统会自动加_n的后缀.
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, packageName + ".apk");
request.setTitle("下载更新");
//插入下载队列.返回下载对象Id
downId = downloadManager.enqueue(request);
//注册广播,下载完成后通知.
regReceiver();
}
//注册广播.文件下载完成后通知.
private void regReceiver() {
Log.d(TAG, String.format("receiver ACTION_MEDIA_MOUNTED :%1$s", "ok"));
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, String.format("regReceiver intent:%1$s", intent));
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
//下载完成的文件是不是我们要的.
if (downId != id) {
return;
}
//通过游标取得下载真实文件名称
Cursor cursor = downloadManager.query(new DownloadManager.Query().setFilterById(id));
cursor.moveToFirst();
String localFileName = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
//启动安装.
Intent fileIntent = new Intent(Intent.ACTION_VIEW);
File apkfile = new File(localFileName);
Log.d(TAG, "filepath=" + apkfile.toString() + " " + apkfile.getPath());
fileIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
fileIntent.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
context.startActivity(fileIntent);
android.os.Process.killProcess(android.os.Process.myPid());
}
}, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
- 使用DownloadManager 自动更新apk
- DownloadManager使用详解以及APK下载更新
- Android中使用DownloadManager下载并安装apk
- Android 使用系统自带的DownloadManager下载apk
- apk自动更新
- DownloadManager使用
- DownloadManager使用
- android使用第三方平台(蒲公英)和DownloadManager实现APP自动更新
- Android 通过DownloadManager实现自动更新的demo
- APK下载并跳转安装--DownloadManager、IntentService、BroadcastReceiver的结合使用
- android 自动更新apk版本
- Android 自动更新APK
- android 自动更新apk版本
- android 自动更新apk版本
- Android DownloadManager 的使用
- DownloadManager使用技巧
- Android DownloadManager 的使用
- Android DownloadManager 的使用
- uva oj 10300
- 三大框架的工作原理(Strut1,Strut2,Hibernate,Spring)——初学篇
- 80端口被system进程占用
- 基于NPAPI插件开发
- java Web 面试题
- 使用DownloadManager 自动更新apk
- 渐变 CGGradient
- Jquery——关于jquery.fn
- JAVA虚拟机加载类的方式解析
- 承接各类gis项目、webgis兼职,gis毕业设计代做、gis毕业论文代写
- param隐含对象
- c++操作mysql - 查询
- 第二周作业03 -- 随机生成一个n位的二进制数(质数)对应的长质数
- 慎用位图索引