Search code examples
androidandroid-install-apk

Update App via APK download (with url), not showing Open/Done Screen


I am trying to add option to update app by downloading apk, its getting installed successfully. But the problem is, app got close after installation, without prompting Open/Done screen in Nougat and above devices.

Open/Done Screen

I have tried using both ACTION_VIEW and ACTION_INSTALL_PACKAGE, but no luck. Also tried with startActivityForResult instead of startActivity, still no luck.

public void installAPK() {
        Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
        File file = new File(path + "update.apk");

        if (Build.VERSION.SDK_INT < 24) {
            intent.setDataAndType(Uri.fromFile(new File(path + "update.apk")), "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
        } else {

            Uri apkURI = FileProvider.getUriForFile(
                    activity,
                    activity.getApplicationContext()
                            .getPackageName() + ".provider", file);
            intent.setDataAndType(apkURI, "application/vnd.android.package-archive");
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
        intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
        activity.startActivityForResult(intent, RC_INSTALL_APK);
    }

Anything I missed to do?


Solution

  • Here's sample code of my application method to open new version

     void OpenNewVersion(String location) {
        Intent downloadIntent;
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            String PATH = Environment.getExternalStorageDirectory() + "/Download/";
    
            File fileLocation = new File(PATH, "app-stock.apk");
            Uri apkUri = FileProvider.getUriForFile(this,  "Adapters.GenericFileProvider", fileLocation);
    
            downloadIntent = new Intent(Intent.ACTION_VIEW);
            downloadIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            downloadIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            downloadIntent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    
            List<ResolveInfo> resInfoList = this.getPackageManager().queryIntentActivities(downloadIntent, PackageManager.MATCH_DEFAULT_ONLY);
            for (ResolveInfo resolveInfo : resInfoList) {
                String packageName = resolveInfo.activityInfo.packageName;
                this.grantUriPermission(packageName, apkUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
            }
    
        } else {
            File fileLocation = new File(this.getFilesDir(), "app-stock.apk");
            downloadIntent = new Intent(Intent.ACTION_VIEW);
            downloadIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            downloadIntent.setDataAndType(Uri.fromFile(fileLocation), "application/vnd.android.package-archive");
        }
        this.startActivity(downloadIntent);
    
    }