26

I am trying to have an onclicklistener call an intent to uninstall an app, by having the intent call the default "uninstall app" activity from the applications settings. I have found here that I can uninstall an app using ACTION_UNINSTALL_PACKAGE, com.packageXYXY, which seems to be what I'm looking for. However, I am unsure how to call this. I have tried the following:

public void onClick(DialogInterface dialog, int which) {
                Uri packageURI = Uri.parse("package:com.packageName");
                Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
                startActivity(uninstallIntent);

but the syntax is wrong. Have tried a number of different ways of calling this, and am kind of stuck. Not sure how to call this. Thanks for your help.

benbeel
  • 1,532
  • 4
  • 24
  • 38

3 Answers3

55

First of all, note that the ACTION_UNINSTALL_PACKAGE is only availible to android-14 (i.e. Ice Cream Sandwich, Android 4.0). That said, the following code works for me:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.view.View;
import android.net.Uri;
import android.content.Intent;

public class TestActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView view = (TextView)findViewById(R.id.test_view);
        view.setOnClickListener(new View.OnClickListener(){
          public void onClick(View view){
            Uri packageUri = Uri.parse("package:org.klnusbaum.test");
            Intent uninstallIntent =
              new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
            startActivity(uninstallIntent);
          }
        });
    }
}

If you want to be able to do this on all versions of the android platform, just change the intent from Intent.ACTION_UNINSTALL_PACKAGE to Intent.ACTION_DELETE like @goto10 does.

Flo
  • 27,355
  • 15
  • 87
  • 125
Kurtis Nusbaum
  • 30,445
  • 13
  • 78
  • 102
  • 1
    Thanks for that. Do you know of an intent that opens the uninstall application activity? – benbeel Oct 23 '11 at 20:16
  • @goto10 Is right (I upvoted you goto10, thanks for the tip). I've edited my answer to include that information. – Kurtis Nusbaum Oct 23 '11 at 20:28
  • 1
    What is the difference between "android.intent.action.DELETE" and "Intent.ACTION_DELETE" ? – android developer Apr 26 '14 at 21:28
  • Very cool, I'm using this after disagree with EULA, app prompt to uninstall it. To cover all versions of Android i'm using this: Intent uninstallIntent = new Intent( (Build.VERSION.SDK_INT >= 14)?Intent.ACTION_UNINSTALL_PACKAGE:Intent.ACTION_DELETE, packageUri); Thanks Kurtis, you deserve a +100. – Codebeat May 28 '15 at 04:36
  • 5
    It works if you have added permission in the manifest file `` – Mihir Trivedi Sep 19 '19 at 19:05
  • 1
    permission require in Android 9 and above. Otherwise uninstall dialog will not appear. Just mention in manifest file as mentioned – Sumit Kumar Nov 03 '19 at 18:06
20

Try ACTION_DELETE instead. That's what this example suggests.

EDIT: I just tested this myself and it worked great.

Community
  • 1
  • 1
goto10
  • 4,370
  • 1
  • 22
  • 33
  • The link to `this example` is broken. I am looking in reference to this question http://stackoverflow.com/questions/11062780/how-to-start-an-activity-or-service-before-an-app-application-is-uninstalled-by/11062873#comment14483198_11062873 – Gaurav Agarwal Jun 16 '12 at 20:51
0

In the Api Demos it looks like they are giving the full path to the activty, not just the package itself. This seems weird, because helloactivity activity is not declared in the manifest of that project. So maybe it is just the package path...

However, set the extra EXTRA_RETURN_RESULT to true in your intent, then start the activity for result and check the result code, maybe it will return a code/extra field in the data intent saying what is the error (Read in the documentation for that)

Jong
  • 9,045
  • 3
  • 34
  • 66