在我的应用 list 中,我声明了权限的使用:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
在我的代码中,我检查我的应用程序是否可以从未知来源安装:
public void reinstallApp(Activity activity, String pathname, int request_code)
{
if (activity.getPackageManager().canRequestPackageInstalls())
{
try
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(pathname)), "application/vnd.android.package-archive");
activity.startActivityForResult(intent, request_code);
}
catch (Exception e)
{
LogUtilities.show(this, e);
}
}
else
{
activity.startActivity(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).setData(Uri.parse(String.format("package:%s", activity.getPackageName()))));
}
}
但是即使我在选择 Activity 中检查了来自未知资源的允许安装,“activity.getPackageManager()。canRequestPackageInstalls()”始终返回“false”。
有什么问题
最佳答案
您必须先申请许可。为此,您必须调用来自未知来源的安装许可。通过重新排列您的代码,我得到了答案。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (!getPackageManager().canRequestPackageInstalls()) {
startActivityForResult(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).setData(Uri.parse(String.format("package:%s", getPackageName()))), 1234);
} else {
callInstallProcess();
}
} else {
callInstallProcess();
}
上面的代码将在您的onCreate()中。您可以验证结果。
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1234 && resultCode == Activity.RESULT_OK) {
if (getPackageManager().canRequestPackageInstalls()) {
callInstallProcess();
}
} else {
//give the error
}
}
在callInstallProcess()中进行安装的位置;
try
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(pathname)), "application/vnd.android.package-archive");
activity.startActivityForResult(intent, request_code);
}
catch (Exception e)
{
LogUtilities.show(this, e);
}
不要忘记在AndroidManifest.xml中授予权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
关于android - 如何在Android Oreo中使用PackageManager canRequestPackageInstalls?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47872162/