6

Большинства активности действий (используемые для запуска различных видов деятельности Settings) в Settings классе приходит с предупреждением:Safeguard против «согласующей активность не может существовать» в андроиде настройках

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

Так как же я могу защитить от этого?

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

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

ответ

4

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

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

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

Должно быть.

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

+1

'resolveActivity()' звучит как слишком много кода для чего-то, что не должно терпеть неудачу в любом случае - я пошел на попытку поймать. Спасибо :) –

+3

@Mr_and_Mrs_D: Обратите внимание, что даже если конкретное действие настроек 'Intent' поддерживается устройством, конкретный * пользователь * может не иметь к нему доступа, если они работают в ограниченном профиле на планшетах Android 4.3+. – CommonsWare

 Смежные вопросы

  • Нет связанных вопросов^_^