Intent для страницы сведений о приложении

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

Я нашел Settings.ACTION_APPLICATION_DETAILS_SETTINGS действие намерения, но получить Ан ActivityNotFoundException когда я пытаюсь запустить его, как описано в моем желании Z. может ли кто-нибудь помочь мне, как правильно отсортировать это?

спасибо

EDIT: как отмечено в ответах, это только API9 и выше, код, который я теперь использую, если кто-то хочет, он ниже. Поверьте, это работает на API3 и выше.

try {

    Intent i = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    i.addCategory(Intent.CATEGORY_DEFAULT);
    i.setData(Uri.parse("package:com.espian.formulae"));
    startActivity(i);

} catch (ActivityNotFoundException ex) { 

    Intent i = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
    i.addCategory(Intent.CATEGORY_DEFAULT);
    startActivity(i);

}

2 ответов


я опубликую его как ответ здесь в дополнение к моему комментарию. Это намерение доступно только с уровня API 9 (2.3). Желание Z не имеет 2.3... еще. ;)


Я знаю, что это слишком поздно, но это может помочь кому-то. На основе источника платформы (froyo) я делаю одну функцию, которая открывает страницу настроек определенного пакета. Она работает в эмуляторе, но я никогда не пробовал на реальном устройстве. Я не знаю, работает ли он на API

вот это:

public boolean startFroyoInstalledAppDetailsActivity(String packagename) {
    boolean result = false;

    Intent i = new Intent();
    i.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
    i.setAction(Intent.ACTION_VIEW);
    i.putExtra("pkg", packagename);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    try {
        cx.startActivity(i);
        result = true;
    } catch (Exception ex) {
        result = false;
    }

    return result;
}

на основе вашего кода я также делаю пряничную версию, которая работает на реальных устройствах с уровнями API 9, 10, 11, 12, 13, 14 и 15 но его можно вызвать безопасно от API 8 однако в этом случае он вернет false.

вот это:

public boolean startGingerbreadInstalledAppDetailsActivity(String packagename) {
    boolean result = false;

    Intent i = new Intent();
    i.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
    i.addCategory(Intent.CATEGORY_DEFAULT);
    i.setData(Uri.parse("package:" + packagename));
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    try {
        cx.startActivity(i);
        result = true;
    } catch (Exception ex) {
        result = false;
    }

    return result;
}