Android7.0以上自動更新安裝apk
阿新 • • 發佈:2018-12-30
Android7.0以上加了很多特性,也對系統做了很多的優化和升級,而在對Uri的訪問上也做了改變,以下用安裝apk的例子來說明
對於程式,我們要實現程式能夠自動檢查更新安裝,我們需要給程式賦予許可權
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
以上這是第一步,接著,我們需要在Manifest.xml檔案當中做如下配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test"> ...
<application ...> <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.test.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android主要新增的 就是provider標籤部分,對於屬性android:authorities一定要注意,當中的前面部分,com.test是程式的appId,就是applicationId,在build.gradle檔案當中可以看到。:resource="@xml/file_paths" /> </provider> ... </application> </manifest>
上面配置當中是否有看到android:resource="@xml/file_paths"呢,這裡再來說一下xml下的file_paths
在專案中的res下新建xml目錄,並在xml目錄當中新建file_paths.xml檔案,該檔案當中的內容如下:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"><external-path name="external_files" path="" /> </paths>其實,我的path為空則表示為Environment.getExternalStorageDirectory()的主目錄;好了,到此為止將配置做好了,以下是呼叫程式的安裝功能,程式碼如下:
Intent intent = new Intent(); //執行動作 intent.setAction(Intent.ACTION_VIEW); //判讀版本是否在7.0以上 if (Build.VERSION.SDK_INT >= 24) {Uri apkUri = FileProvider.getUriForFile(mContext, "com.test.fileprovider", file); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); } else { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); } mContext.startActivity(intent);關於file_paths的其實配置有其他文章參考,原文地址為:http://www.czhzero.com/2016/12/21/how-to-install-apk-on-Android7-0/