1. 程式人生 > >Android7.0以上自動更新安裝apk

Android7.0以上自動更新安裝apk

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
:resource="@xml/file_paths" /> </provider> ... </application> </manifest>
主要新增的 就是provider標籤部分,對於屬性android:authorities一定要注意,當中的前面部分,com.test是程式的appId,就是applicationId,在build.gradle檔案當中可以看到。
上面配置當中是否有看到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/