简体   繁体   中英

How can I uninstall an app programatically on android 9?

It was working perfectly for older android versions(before android 9). But on android 9, nothing is happening after i call startActivity(intent).

Intent intent=new Intent(Intent.ACTION_DELETE,Uri.fromParts("package",packageInfo.packageName,null));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

This is possible from Android 6.0 and up. Make your app the Device owner.

Once your app gets the Device owner permission, we can install, uninstall and update silently without any user intervention.

you must add android.permission.DELETE_PACKAGES to your manifest for the uninstall to work

The device owner api supports silent install/uninstall from Android 6.0 and above.

 public static boolean installPackage(Context context, InputStream in, String packageName)
    throws IOException {
PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
        PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
// set params
int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
OutputStream out = session.openWrite("COSU", 0, -1);
byte[] buffer = new byte[65536];
int c;
while ((c = in.read(buffer)) != -1) {
    out.write(buffer, 0, c);
}
session.fsync(out);
in.close();
out.close();

session.commit(createIntentSender(context, sessionId));
return true;
}

 private static IntentSender createIntentSender(Context context, int sessionId) {
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context,
                sessionId,
                new Intent(ACTION_INSTALL_COMPLETE),
                0);
        return pendingIntent.getIntentSender();
    }  

Uninstall

String appPackage = "com.your.app.package";
Intent intent = new Intent(getActivity(), getActivity().getClass());
PendingIntent sender = PendingIntent.getActivity(getActivity(), 0, intent, 0);
PackageInstaller mPackageInstaller = getActivity().getPackageManager().getPackageInstaller();
mPackageInstaller.uninstall(appPackage, sender.getIntentSender());

After looking inside the 'Intent.java' class, I've found that android 9 requires this permission to be inserted inside the Manifest:

android.permission.REQUEST_DELETE_PACKAGES

After I added this, it is working perfectly:): Really disappointed that nobody answered this simple question :(

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM