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
- 在 Ubuntu 上自動化安裝基本應用的方法Ubuntu
- 安裝 PHP 8.0PHP
- MySQL 8.0 安裝MySql
- APK安裝過程APK
- Flutter外掛開發之APK自動安裝FlutterAPK
- APK安裝流程詳解6——PackageManagerService啟動前奏APKPackage
- Anbox安卓apk應用安裝及使用說明和常見問題安卓APK
- MYSQL8.0安裝MySql
- 安裝問題
- android 程式碼安裝和解除安裝apkAndroidAPK
- android apk靜默安裝和解除安裝AndroidAPK
- Ubuntu After Install – 幫你在Ubuntu上自動安裝流行的軟體Ubuntu
- Mac 安裝 MySQL8.0MacMySql
- Docker 安裝 MySQL8.0DockerMySql
- laravel8.0 + vue 安裝LaravelVue
- ubuntu 安裝php8.0UbuntuPHP
- Linux安裝mysql 8.0LinuxMySql
- Swoole安裝問題
- tengine安裝問題
- 安裝clusterware問題
- jive安裝問題
- 安裝的問題
- JdonJive安裝問題
- jivejdon安裝問題
- jive安裝問題?
- 安裝出問題
- 關於Android安裝apk出現解析包異常問題情況總結AndroidAPK
- Linux安裝MySQL8.0LinuxMySql
- 一鍵安裝PHP8.0PHP
- Ubuntu 16.04 安裝 Mysql 8.0UbuntuMySql
- Windows 本地安裝 Mysql8.0WindowsMySql
- Rocky Linux 安裝 MySQL 8.0LinuxMySql
- CMD控制檯命令安裝apk包APK
- Android Apk安裝過程分析AndroidAPK
- 雲上自動化:全球雲上自動化編排系統比拼
- SAE安裝問題,求助