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);
精彩评论