Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

android

I have an application that I'd like to add auto-update functionality (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?

like image 658
Mike Avatar asked Aug 25 '10 16:08

Mike


People also ask

How do I open an APK file on my Android?

If you want to locate the APK files in your Android phones, you can find the APK for user-installed apps under /data/app/directory while the preinstalled ones are located in /system/app folder and you can access them by using ES File Explorer.

Why APK file is not opening?

Depending on your device, you might need to give a specific app, such as Chrome, permission to install unofficial APK files. Or, if you see it, enable Install Unknown Apps or Unknown sources. If the file doesn't open, try browsing for it with a file manager like Astro File Manager or ES File Explorer File Manager.

What do I do after I download an APK?

Once it's downloaded, open Downloads, tap on the APK file and tap Yes when prompted. The app will begin installing on your device.


2 Answers

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>
like image 95
android developer Avatar answered Sep 22 '22 05:09

android developer


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);
like image 33
Travis Avatar answered Sep 21 '22 05:09

Travis