免费行情软件网站游戏,做网站怎么自定义背景图片,做网站时的兼容问题,二手车网站开发过程最近开发的App需要下载安装另一个App。这就涉及到了app的安装代码。关于App的安装代码#xff0c;写了不少#xff0c;所以这一块觉得不是问题#xff1a;
判断版本#xff0c;Android8.0判断是否有未知来源安装全选#xff0c;没有则打开未知来源安装权限设置界面去开启…最近开发的App需要下载安装另一个App。这就涉及到了app的安装代码。关于App的安装代码写了不少所以这一块觉得不是问题
判断版本Android8.0判断是否有未知来源安装全选没有则打开未知来源安装权限设置界面去开启。去设置未知来源前先缓存以下当前等待安装的apk文件路径 public void installApkProcess(File apkFile) {if (Build.VERSION.SDK_INT 26) {boolean hasInstallPermission mContext.getPackageManager().canRequestPackageInstalls();if (!hasInstallPermission) {//没有安装未知来源的权限startInstallPermissionSettingActivity();//去设置之前先暂存一下安装包等设置完载安装CommonTemp.getInstance().setWaitingForInstallPermissionSettingApkFile(apkFile);return;}}installApk(apkFile);} 打开位置来源权限设置界面 private void startInstallPermissionSettingActivity() {Uri packageURI Uri.parse(package: mContext.getPackageName());//注意这个是8.0新APIIntent intent new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);Activity activity AppManager.getAppManager().getTopActivity();activity.startActivityForResult(intent, 6000);}
App安装的代码
public void installApk(File apkFile) {if (apkFile null || !apkFile.exists()) {return;}Intent intent new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT Build.VERSION_CODES.N) {//Android7.0Uri contentUri FileProvider.getUriForFile(mContext, mContext.getPackageName() .fileprovider, apkFile);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);intent.setDataAndType(contentUri, application/vnd.android.package-archive);} else {// 通过Intent安装APK文件intent.setDataAndType(Uri.parse(file:// apkFile.toString()),application/vnd.android.package-archive);}if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() 0) {mContext.startActivity(intent);//安装完清除缓存CommonTemp.getInstance().setWaitingForInstallPermissionSettingApkFile(null);}} onActivityResult种监听开启了未知来源安装权限此时继续执行安装apk Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (6000 requestCode resultCode RESULT_OK) {//安装未知来源权限设置完成//权限设置完成应该再次安装installApk(CommonTemp.getInstance().getWaitingForInstallPermissionSettingApkFile());}}
然而当我在Android11的设备上运行时候程序却发生了崩溃原因是我打开未知来源安装设置界面后开通权限之后我本地刚刚缓存的apk文件名称变成空了......有些地方没有判空导致程序崩溃了。不应该呀平白无故为啥我的缓存变成空了看了下日志发现我的App进程结束后又重启了这样本地的一些单例之类的缓存就是被清空了....... 网上百度查资料得出结论
Android 11开始Google默认情况下允许安装未知来源应用程序只是在安装应用程序时候会给出一些警告。如果我们代码还是去打开未知来源安装的界面点击开启未知来源安装权限后应用程序会被结束并重启
解决方案在打开未知来源安装设置界面之前需要判断下当前Android版本如果是11或11以上就直接安装。 所以此处还是需要注意下避免自己的应用程序出现不必要的bug。关于apk安装Android11之前的问题我之前发了一篇文章Android7.0、8.0安装apk以及安装apk弹出“选择打开方式”的解决方案_手机安装apk显示用其他应用打开-CSDN博客