Android 8及以上版本(API > 26)未检测到REQUEST_INSTALL_PACKAGES权限
我正在为我的Android应用实现一个APK安装器。Android 7上的工作流程可以说是完美无缺。然而,Android 8及更高版本在权限方面却遇到了问题。出于预见,应用已设置为检测这种情况并向用户请求权限(REQUEST_INSTALL_PACKAGES)。
问题出现在这里;即使我已经授予权限,应用似乎也不认为有权限。下面是用户从权限设置返回时,我的处理方式:
ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<>() {
@Override
public void onActivityResult(ActivityResult result) {
runOnUiThread(() -> {
if (appHasInstallPackagePermission()) {
showInstallationStep();
} else {
manuallyRecheckedInstallPermission = true;
showPermissionRequiredPage();
}
});
}
}
);
无论是否开启权限,总是执行 else 分支,因此我又回到了应用的权限页面……以下是更多相关代码:
if (appHasInstallPackagePermission()) {
showInstallationStep();
} else {
showPermissionRequiredPage();
}
private void showPermissionRequiredPage() {
String appName = launcherPackageInfo.getAppName();
titleTextView.setText(getString(R.string.permission_required_title));
if (manuallyRecheckedInstallPermission) {
descriptionTextView.setText("...");
} else {
descriptionTextView.setText("...");
}
permissionButton.setOnClickListener(new View.OnClickListener() {
@Override
@RequiresApi(api = Build.VERSION_CODES.O)
public void onClick(View v) {
requestInstallPackagesPermission();
permissionButton.setText("...");
}
});
permissionButton.setText(getString(R.string.grant_permission_button_text));
permissionButton.setVisibility(View.VISIBLE);
permissionButton.requestFocus();
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void requestInstallPackagesPermission() {
Intent settingsIntent = new Intent(
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
Uri.parse("package:" + getPackageName())
);
activityResultLauncher.launch(settingsIntent);
}
解决方案
我找到了我遇到的问题。尽管我的应用支持最高到SDK 34,但 targetSdk 在 build.gradle (app) 中的值是24。
解决方案是将 targetSdk 改为一个至少为26的任意值。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。