gpt4 book ai didi

android - 如何在 Android Oreo 中使用 PackageManager canRequestPackageInstalls?

转载 作者:行者123 更新时间:2023-12-02 16:10:49 26 4
gpt4 key购买 nike

在我的应用程序 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.getPackageManager().canRequestPackageInstalls()”始终返回“false”,即使我在选择 Activity 中检查了允许从未知来源安装。

有什么问题吗?

最佳答案

您必须先征求许可。为此,您必须从未知来源调用安装权限。我通过重新排列你的代码得到了答案。

        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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com