如何在Android Oreo中管理来自未知来源的安装?

前端之家收集整理的这篇文章主要介绍了如何在Android Oreo中管理来自未知来源的安装?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Android Oreo(8.0)中,对如何允许从未知来源(从用户的角度)安装应用程序以及获得安装权限的过程(从开发人员的角度)进行了一些更改.

由于我发现特别难以找到开发人员所需的所有步骤,我认为在这里请求解决方案并自己回答问题是有用的,因为我找到了答案,以便将来参考那些,面临同样的障碍.

答案将包括以下问题:

>如何检查是否允许我请求安装包?
>我必须要求什么样的准许?
>如何提示用户授予此权限?
>如何提示用户安装指定的.apk?

(如果我在这里仍然遗漏任何内容,我会感激任何额外的答案或评论指出.)

解决方法

对于初学者,您的应用程序需要在build.gradle或AndroidManifest.xml中声明targetSdkVersion为26(Android Oreo的API级别)或更高版本才能使所有这些工作.

然后回答上面的问题:

  1. How to check whether I’m allowed to request a package install?

您可以在Activity的代码中的任何位置使用getPackageManager().canRequestPackageInstalls()进行检查.请注意,如果您未声明适当的权限或定位错误的SDK版本,则此方法始终返回false.

  1. What exact permission do I have to request?

您必须在AndroidManifest.xml中声明Manifest.permission.REQUEST_INSTALL_PACKAGES,如下所示:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
  1. How can I prompt the user to grant this permission?

您可以使用Intent ACTION_MANAGE_UNKNOWN_APP_SOURCES用户发送到适当的目的地:

startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES));

您还可以将用户更直接地发送到应用程序的特定设置,其中包括

startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,Uri.parse("package:your.application.package")));
  1. How do I prompt the user to install a specified .apk?

一旦确定您被授予适当的权限,您就可以提示用户在您的Activity代码中的任何位置安装.apk文件(这指的是您的Activity的上下文),使用:

Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setDataAndType(FileProvider.getUriForFile(this,"your.application.package.fileprovider",new File("/path/to/your/apk")),"application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

startActivity(intent);

如果您想知道安装是否成功,取消或失败,您还可以添加intent.putExtra(Intent.EXTRA_RETURN_RESULT,true)并以startActivityForResult(Intent,int)开头.

有关如何正确获取.apk文件的Uri的信息,请参阅FileProvider.

原文链接:https://www.f2er.com/android/308967.html

猜你在找的Android相关文章