Android 相容8.0 系統 安裝apk 未知包
阿新 • • 發佈:2019-02-17
隨著系統升級,相容不同的系統必備
自動更新後安裝
註冊許可權
<!-- 請求安裝許可權 8.0 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
7.0 私有許可權問題
8.0 允許安裝未知應用
boolean isGranted(String permission) {
// 8.0 許可權 安裝apk 許可權
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return getActivity().getPackageManager().canRequestPackageInstalls();
}
return true;
}
//許可權不存在,申請許可權,並跳到當前包
if(!isGranted()){
Uri packageURI = Uri.parse("package:" + getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, 100001 );
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100001) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 同意以後 進行安裝
}
}
}
/**
* 安裝apk
*/
public static void installApk(Activity activity, File apkFile){
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
// 宣告需要的臨時許可權
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// 第二個引數,即第一步中配置的authorities
String packageName = activity.getApplication().getPackageName();
Uri contentUri = FileProvider.getUriForFile(activity, packageName + ".fileProvider", apkFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
}
activity.startActivity(intent);
}