android 8.0应用内安装包,Android 8.0 下载安装进入【安装未知应用】页面,两步简化一步...
小菜昨天接到客戶反饋的問題,說華為手機升級到 Android 8.0 系統以后,程序升級下載之后不能安裝;找一個手機測試果然如此,每次下載完之后不跳轉安裝頁面,重新進入程序又繼續下載,之后依舊不跳轉安裝頁面,再次進入循環...流程自然欠妥,但發現問題主要還是 Android8.0 權限管理的問題。
在 Android 8.0 系統中,未知來源應用不可直接安裝,跳轉到的是未知來源應用管理列表,如果需要安裝,則需要手動授權"安裝未知應用"。
網上大神們解決方案很多,基本一致,但小菜嘗試發現每次安裝跳轉到【安裝未知應用列表】頁面,之后找到相應的應用,進入【安裝未知應用】頁面,再手動允許安裝應用,小菜想彈框提醒一步允許安裝,嘗試如下:權限添加,在 AndroidManifest.xml 清單文件中,添加如下權限;在【打開安裝包】的代碼中添加兼容 Android 8.0 的代碼判斷;private?void?notifyToInstall()?{????if?(!StringUtils.isBlank(apkPath))?{
Intent?intent?=?new?Intent(Intent.ACTION_VIEW);????????//?由于沒有在Activity環境下啟動Activity,設置下面的標簽
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);????????if?(Build.VERSION.SDK_INT?>=?24)?{?//判讀版本是否在7.0以上
//參數1?上下文,?參數2?Provider主機地址?和配置文件中保持一致??參數3??共享的文件
Uri?apkUri?=
FileProvider.getUriForFile(context,?"com.founder.newaircloud.fileprovider",?new?File(apkPath));????????????//添加這一句表示對目標應用臨時授權該Uri所代表的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri,?"application/vnd.android.package-archive");????????????//兼容8.0
if?(Build.VERSION.SDK_INT?>=?Build.VERSION_CODES.O)?{????????????????boolean?hasInstallPermission?=?mContext.getPackageManager().canRequestPackageInstalls();????????????????if?(!hasInstallPermission)?{
Intent?intent2?=?new?Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivityForResult(intent2,?100);????????????????????return;
}
}
}?else?{
intent.setDataAndType(Uri.fromFile(new?File(apkPath)),?"application/vnd.android.package-archive");
}
activity.startActivity(intent);
}
}
安裝未知應用列表頁面
安裝未知應用頁面在回調過程中添加一個狀態,activity.startActivityForResult(intent2, 100); apkUrl 為下載到本地手機的 apk 路徑,接收之后直接安裝 apk;@Overrideprotected?void?onActivityResult(int?requestCode,?int?resultCode,?Intent?data)?{????super.onActivityResult(requestCode,?resultCode,?data);????if?(requestCode?==?100)?{????????if?(!StringUtils.isBlank(mCache.getAsString("apkUrl")))?{
installApk(mCache.getAsString("apkUrl"));
}
}
}//安裝應用private?void?installApk(String?apkUrl)?{
Intent?intent?=?new?Intent(Intent.ACTION_VIEW);????if?(Build.VERSION.SDK_INT?
intent.setDataAndType(Uri.fromFile(new?File(apkUrl)),????????????????"applicationnd.android.package-archive");
}?else?{//Android7.0之后獲取uri要用contentProvider
Uri?apkUri?=
FileProvider.getUriForFile(context,?"com.founder.chenbaoxinjiang.fileprovider",?new?File(apkUrl));????????//添加這一句表示對目標應用臨時授權該Uri所代表的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri,?"applicationnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getBaseContext().startActivity(intent);
}
合并為一步,允許安裝
作者:老菜和尚
總結
以上是生活随笔為你收集整理的android 8.0应用内安装包,Android 8.0 下载安装进入【安装未知应用】页面,两步简化一步...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 指示器平移动画,Andr
- 下一篇: android获取本地图片后缀,Andr