开发者

Android: how to open an apk file after downloading for auto-update?

I have an application that I'd like to add auto-update functi开发者_开发问答onality (it's not in the marketplace). I have all the code in place that would check to see if there is an update available and then I call something like this:

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse(Configuration.APK_URL));
c.startActivity(intent);  

which starts downloading the file. Is there a way that I can programmatically tell it to "open" the file to begin the installation process without the user having to go to the downloads and clicking on it?


The answer above was for pre-API-24.

If your app targets API 24 or more (and it should), you need to use something else (otherwise you get FileUriExposedException, as described here) :

    File apkFile = new File(...);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri fileUri = android.support.v4.content.FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", apkFile);
    intent.setDataAndType(fileUri, "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(intent);

provider_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="."/>-->
    <external-path path="Android/data/YOUR_PACKAGE_NAME" name="files_root" />
    <external-path path="." name="external_storage_root" />
</paths>

where YOUR_PACKAGE_NAME is your app's package name.

manifest:

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>


This will start the installation process

File apkFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/packageName.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
startActivity(intent);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜