В настройках Android может отсутствовать защита от совпадающего действия.

Большинство действий действий (используемых для запуска различных действий настроек) в Настройки класс приходит с предупреждением:

В некоторых случаях подходящего действия может не быть, поэтому убедитесь, что вы застрахованы от этого.

Итак, как мне защититься от этого?

try {
    final Intent i = new Intent(Settings. ACTION_WIRELESS_SETTINGS); // say
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // not sure if needed
    startActivity(i);
} catch (Exception e) { // what should I catch here 
    // I would hate to catch Throwable, but should I ?
}

Если я прочитаю это правильно, например, выдается исключение времени выполнения (NPE). Я хотел бы использовать что-то более конкретное, например ActivityNotFoundException, но этого достаточно?


person Mr_and_Mrs_D    schedule 16.11.2013    source источник


Ответы (1)


Если я правильно прочитал это, например, возникает исключение времени выполнения (NPE).

Нет, это какая-то другая проблема. Intent явно сработало, так как сбой происходит из-за самих настроек, а не из приложения, вызвавшего startActivity().

Я хотел бы использовать что-то более конкретное, например ActivityNotFoundException, но достаточно ли этого?

Так должно быть.

Если вас это беспокоит или вы предпочитаете быть активным, а не просто звонить startActivity(), сначала используйте PackageManager и resolveActivity(). Если это возвращает null, нет активности, соответствующей Intent, и вам следует попробовать что-то еще.

person CommonsWare    schedule 16.11.2013
comment
resolveActivity() звучит как слишком много кода для чего-то, что в любом случае не должно давать сбоев - я пошел на попытку поймать. Спасибо :) - person Mr_and_Mrs_D; 16.11.2013
comment
@Mr_and_Mrs_D: Обратите внимание, что даже если конкретное действие Intent в настройках поддерживается устройством, конкретный пользователь может не иметь к нему доступа, если он работает в ограниченном профиле на планшетах Android 4.3+. - person CommonsWare; 16.11.2013