Android7.0、8.0 apk安装
作者:互联网
第一步
(Android7.0 以后需配置FileProvider)
在AndroidManifest.xml 配置 FileProvider
为了防止重复 android:authorities 一般配置为 包名.fileProvider <provider android:name="android.support.v4.content.FileProvider" android:authorities="包名.fileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
第二步
res添加 xml文件夹,添加file_paths.xml 写入:
<?xml version="1.0" encoding="utf-8"?> <resources> <paths> <external-path name="camera_photos" path="" /> </paths> </resources>
第三步 配置8.0需要的权限
(Android8.0以后 不能直接安装未知来源的apk(只要不是在google play上上架的都是未知来源))
添加权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
第四步 调起安装
public static void installAPK(Context context,File file){ try { Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT< Build.VERSION_CODES.O) { // 手机版本大于等于7.0 小于8.0 Log.i("TAG_Success","7.0+以上版本"); Uri apkUri = FileProvider.getUriForFile(context, "包名.fileProvider", file); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ //Android 8.0及以上 //判断是否开启未知来源apk安装权限 true-开启 false-没开启 boolean haveInstallPermission = context.getPackageManager().canRequestPackageInstalls(); Uri packageURI = Uri.parse("package:" + context.getPackageName()); if (!haveInstallPermission){ //未开启,跳转至系统开启界面 Intent intent2 = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI); context.startActivity(intent2); }else { Uri apkUri = FileProvider.getUriForFile(context, "包名..fileProvider", file); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); } }else { // 7.0+以下版本 intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); } context.startActivity(intent); }catch (Exception e){ } }
标签:8.0,file,Android7.0,apk,VERSION,Intent,Build,context,intent 来源: https://blog.csdn.net/qq_27400335/article/details/98075190