<!-- 8.0以上系统自动安装更新app会闪退,需要申请权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
private void onCallPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean couldAutoInstall = getPackageManager().canRequestPackageInstalls();
if (couldAutoInstall) {
doAppInstall();
} else {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.INSTALL_PACKAGES) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INSTALL_PACKAGES}, REQUEST_CODE_INSTALL_PACKAGE);
} else {
doAppInstall();
}
}
} else {
doAppInstall();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_INSTALL_PACKAGE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
doAppInstall();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0);
if (resolveInfoList == null || resolveInfoList.isEmpty()) {
return;
}
startActivityForResult(intent, REQUEST_CODE_OPEN_INSTALL_UNKNOWN);showOpenUnknownInstallDialog();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_OPEN_INSTALL_UNKNOWN && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean couldAutoInstall = getPackageManager().canRequestPackageInstalls();
if (couldAutoInstall) {
onCallPermission();
}
}
}