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