BroadcastReceiver Приоритетная проблема - PullRequest
2 голосов
/ 24 августа 2011
  1. Я внедряю SMSListener в своем приложении и, возможно, установил его наивысший приоритет как android:priority="2147483647", чтобы я мог получать вызов при поступлении новых смс.

  2. Во втором приложении-образце я установил тот же приоритет, что и выше, для SMSListener, но при получении вызова для новых входящих SMS я использую abortBroadcast();.

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

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

Я надеюсь, что изложил свою точку зрения и ищу какой-нибудь убедительный ответ.

Спасибо, что уделили время моей проблеме.

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

abortBroadcast работает только тогда, когда они его получают вначале, обычно в зависимости от порядка установки, но не всегда.) Запустятся приложения системного уровня, затем Android попытается отсортировать несистемные приложения. Если вы посмотрите на исходный код, порядок выполнения основан на уровне приоритета, но вызовы для выбора порядка приложений не согласованы для приложений старше 999 или для приложений с таким же уровнем приоритета. Это может быть в порядке установки, но системные изменения могут привести к другим порядкам выполнения (что я видел много раз при тестировании этого).

0 голосов
/ 18 июня 2012

Другое дело, насколько я понимаю, приоритет для приложений должен быть между -1000 и 1000 включительно.

http://developer.android.com/reference/android/content/IntentFilter.html#setPriority%28int%29

http://developer.android.com/reference/android/content/IntentFilter.html#SYSTEM_HIGH_PRIORITY

...