Неявное намерение удалить приложение?

Я пытаюсь использовать вызов onclicklistener для намерения удалить приложение, указав намерение использовать действие "удалить приложение" по умолчанию из настроек приложений. Я нашел здесь что я могу удалить приложение, используя ACTION_UNINSTALL_PACKAGE, com.packageXYXY, который, похоже, является тем, что я ищу. Однако я не уверен, как это назвать. Я пробовал следующее:

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);

но синтаксис неверен. Попробовали несколько разных способов назвать это, и я застрял. Не уверен, как это назвать. Благодарим за помощь.

Ответ 1

Прежде всего, обратите внимание, что ACTION_UNINSTALL_PACKAGE доступен только для Android-14 (например, Ice Cream Sandwich, Android 4.0). Тем не менее, для меня работает следующий код:

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);
          }
        });
    }
}

Если вы хотите иметь возможность делать это на всех версиях платформы Android, просто измените намерение с Intent.ACTION_UNINSTALL_PACKAGE на Intent.ACTION_DELETE, как это делает @goto10.

Ответ 2

Вместо этого попробуйте ACTION_DELETE. Это предлагает этот пример.

EDIT: Я просто испытал это сам, и он отлично работал.

Ответ 3

В Api Demos похоже, что они дают полный путь к активности, а не только сам пакет. Это кажется странным, потому что в манифесте этого проекта активность helloactivity не объявляется. Возможно, это просто путь к пакету...

Однако добавьте дополнительные EXTRA_RETURN_RESULT в true в свои намерения, затем запустите действие для результата и проверьте код результата, возможно, он вернет поле кода/дополнительного поля в намерении данных, говоря, что такое ошибка ( Прочитайте в документации для этого)