首先,在AndroidManifest.xml写权限
<!-- 安装应用权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
然后在application包围里面写
<!-- 访问文件权限 -->
<provider android:name="androidx.core.content.FileProvider"
android:authorities="包名.fileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
然后在res目录新建xml目录,在xml目录新建file_paths.xml文件,文件中写入
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="Android/data/包名/" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>
以上就是获取访问Uri权限的内容
下面开始在Java中使用代码来动态申请安装app权限以及安装指定安装包
//判断有没有权限
boolean hasins = getPackageManager().canRequestPackageInstalls();
//如果没有就写跳转申请界面,这个是8.0新API
Uri packageURI = Uri.parse("package:" + getPackageName());
Intent intent10086 = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent10086, 10086);
//如果有权限,就直接安装
Intent intent = new Intent(Intent.ACTION_VIEW);
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", new File("安装包路径"));
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(new File("安装包路径")), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);
网友评论