AndroidN7.0、8.0上自動安裝apk問題
Android 7.0 上安裝apk android.os.FileUriExposedException問題
如果你的系統版本是 8.0+,那你需要多加一個許可權,否則無法跳轉到安裝頁
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
如果安裝報錯,可能是臨時檔案訪問路徑沒有配置,或者百度上找到的安裝程式碼是舊版本的,7.0以後不在支援,文章最下面有適配的程式碼。
android.os.FileUriExposedException: file:///storage/emulated/0/trgis/1511427343635.apk exposed beyond app through Intent.getData()
今天做自動更新的時候,自己下載好的apk安裝包呼叫系統的安裝服務就報錯,很是鬱悶,因為之前的程式碼是好著的,後來查了下資料,原來是Android N 7.0版本之後不支援之前的寫法了,好了直接上解決方案。
1.在AndroidManifest.xml application標籤中新增如下程式碼
<provider
android:name="android.support.v4.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>
注意
authorities:你app的包名.fileProvider
grantUriPermissions:必須是true,表示授予 URI 臨時訪問許可權
exported:必須是false
resource:中的@xml/file_paths是我們接下來要新增的檔案
2.在res/xml下新建file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path
name="files_root"
path="" />
</paths>
</resources>
注意
path:需要臨時授權訪問的路徑(.代表所有路徑)
name:就是你給這個訪問路徑起個名字
3.適配AndroidN
-
以前我們直接 Uri.fromFile(apkFile)構建出一個Uri,現在我們使用
FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + “.fileProvider”, apkFile); -
BuildConfig.APPLICATION_ID直接是應用的包名
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
/* Android N 寫法*/
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID + ".fileProvider", new File("apk地址"));
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
/* Android N之前的老版本寫法*/
intent.setDataAndType(Uri.fromFile(new File("apk地址")), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);
關注
如果有問題,請在下方評論,或者加群討論 200909980
關注下方微信公眾號,可以及時獲取到各種技術的乾貨哦,如果你有想推薦的帖子,也可以聯絡我們的。
相關文章
- Android 7.0/8.0 安裝APK時解析包錯誤問題AndroidAPK
- appium 安裝 apk 包問題APPAPK
- Anbox安卓apk應用安裝及使用說明和常見問題安卓APK
- 在 Ubuntu 上自動化安裝基本應用的方法Ubuntu
- 安裝 PHP 8.0PHP
- MySQL 8.0 安裝MySql
- Flutter外掛開發之APK自動安裝FlutterAPK
- 關於Android安裝apk出現解析包異常問題情況總結AndroidAPK
- MYSQL8.0安裝MySql
- Linux安裝mysql 8.0LinuxMySql
- Swoole安裝問題
- Pytorch安裝問題PyTorch
- Rocky Linux 安裝 MySQL 8.0LinuxMySql
- Docker 安裝 MySQL8.0DockerMySql
- Mac 安裝 MySQL8.0MacMySql
- Linux安裝MySQL8.0LinuxMySql
- laravel8.0 + vue 安裝LaravelVue
- ubuntu 安裝php8.0UbuntuPHP
- Ubuntu 16.04 安裝 Mysql 8.0UbuntuMySql
- 使用adb如何批量給裝置安裝apkAPK
- CMD控制檯命令安裝apk包APK
- SAE安裝問題,求助
- ubuntu安裝jdk問題UbuntuJDK
- Windows 本地安裝 Mysql8.0WindowsMySql
- linux 安裝mysql8.0.xLinuxMySql
- 一鍵安裝PHP8.0PHP
- apk編輯器pc版免安裝APK
- 手機無法安裝 stfservice.apkAPK
- android apk安裝過程原始碼解析AndroidAPK原始碼
- mysql 8.0.29 解除安裝問題MySql
- VirtualBox安裝問題記錄
- SecureFX安裝問題(包含SecureCRT)Securecrt
- Laravel 安裝遇到的問題Laravel
- 請教 TensorFlow 安裝問題
- OneThink在Sae安裝問題
- jupyter安裝常見問題
- 安裝工具常見問題
- 安裝kylin遇到的問題