1、自Android6.0,Android7.0出来后apk升级安装就不能用以前的需要多申请权限,FileProvider(这就不多说了),Android8.0的出来,下载apk后不会跳转安装页面,是因为Android8.0多了未知来源权限,需要跳转手动打开申请未知来源权限或这设置列表—>安全与隐私—>更多安全设置—>安装未知应用
2、需要在清单文件添加权限, <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
,切记一定要申请,不然跳转到权限列表,找不到当前的软件
3、项目targetSdkVersion一定要是26,不然boolean b = getPackageManager().canRequestPackageInstalls();
返回的一直是false
4、下面是具体代码,先判断当前版本是否是26,如果是26的话,判断未知来源权限是否有,如果没有去申请,用户自己跳转当前软件的未知来源权限申请页面,赋予权限后然后在判断当前权限是否拥有,有该权限后就行安装即可
public void checkIsAndroidO() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean b = getPackageManager().canRequestPackageInstalls();
if (b) {
updateApk(); //安装apk
} else {
//请求安装未知应用来源的权限
DialogUtils.showCustomDialog(this,"提示", "升级新版本安装应用需要打开未知来源权限,请去设置中开启权限", "是", "", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 10010);
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}, false);
}
} else {
updateApk(); //安装apk
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 10010:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
updateApk();
} else {
Uri packageURI = Uri.parse("package:"+getPackageName());//设置包名,可直接跳转当前软件的设置页面
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
startActivityForResult(intent, 10012);
}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 10012:
checkIsAndroidO();
break;
}
}