Подавить / заблокировать BroadcastReceiver в другом приложении
Перейти SMS недавно обновлен с новой функцией "Отключить уведомления других сообщений". Эта функция заставляет другие приложения, прослушивающие входящие SMS-трансляции, не срабатывать. Например, мое приложение Shady SMS прослушивает входящую SMS-трансляцию для отправки уведомлений, а также для извлечения и сохранения SMS-сообщения.
Когда эта новая функция в Go SMS включена, Shady не отправляет уведомление и не сохраняет сообщение, в конечном итоге вообще не отвечая на входящую SMS-трансляцию.
Go SMS должно как-то отменять регистрацию приемника вещания моего приложения, потому что входящее SMS-вещание не может быть прервано. Мой фильтр намерений установлен на android:priority="0".
Какие-нибудь мысли?
5 ответов
Мой фильтр намерений установлен на android:priority="0".
Это самый низкий возможный приоритет. Все остальные приложения получат свой шанс, прежде чем он придет к вам. Цитирование документации:
Он управляет порядком, в котором широковещательные приемники выполняются для приема широковещательных сообщений. Те с более высокими значениями приоритета вызываются перед теми с более низкими значениями. (Порядок применяется только к синхронным сообщениям; он игнорируется для асинхронных сообщений.)
Итак, они просто звонят abortBroadcast()
, Они, вероятно, имеют приоритет на крыше.
GoSMS имеет приоритет 2147483647, но это не "максимум" (это наибольшее целое число) - он слишком высок. Документация Android для SYSTEM_HIGH_PRIORITY - 1000 (http://developer.android.com/reference/android/content/IntentFilter.html#SYSTEM_HIGH_PRIORITY), и уровни приоритета приложения должны быть ниже этого уровня - это не системное приложение.
Это создаст непредсказуемое поведение. (GoSMS не всегда отклоняет уведомления других приложений - abortBroadcast работает только тогда, когда они его получают вначале, обычно в зависимости от порядка установки, но не всегда.) Запустятся приложения системного уровня, затем Android попытается отсортировать несистемные приложения. Если вы посмотрите на исходный код, порядок выполнения основан на уровне приоритета, но вызовы для выбора порядка приложений не согласованы для приложений старше 999 или для приложений с таким же уровнем приоритета. Это может быть в порядке установки, но системные изменения могут привести к другим порядкам выполнения (что я видел много раз при тестировании этого).
Это должно действительно быть исправлено GoSMS (и многими другими приложениями, которые имеют это неправильно). Тот факт, что "приоритет" является целым числом, не означает, что наибольшее значение целого числа соответствует высшему уровню приоритета. (Точно так же, как веб-URL является строкой, но не все строковые значения являются действительными.) Кроме того, GoSMS должна знать, что другие приложения могут захотеть обрабатывать SMS-сообщения, которые не видны пользователю. Если они захватывают это и показывают это пользователю, это бессмысленно.
Я думаю, что мы исправили это, и это сработало:) Мы запускаем Broadcast Receiver через код
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(2147483647);
receiver = new SmsAnalizer();
ac.registerReceiver(receiver, filter);
Это сработало, и мы выполнили свою работу.
Загрузите apktool http://code.google.com/p/android-apktool/
загрузить Auto-sign Created By Дэйв Да Иллест 1 http://www.mediafire.com/?j9n7o6ub9urkfwy
в папке извлекли apktool и NICEBUTWRONGLYWRITTEN.APK запустите cmd в cmd apktool d -d NICEBUTWRONGLYWRITTEN.APK modif1 подождите, перейдите в каталог dir modif1, найдите первый видимый файл XML, найдите в этом значении V=2147483647 (найдите число 2147483647), замените его сохранение файла. запустите в окне cmd apktool b -d modif1/ newsmsapp.apk дождитесь завершения сборки
Возьмите встроенный файл newsmsapp.apk в каталог с signapk, вставьте его туда, запустите cmd cd в каталог с типом signapk: sign newsmsapp.apk
установить на свой телефон newsmsapp.apk
сделанный.
Go SMS Pro имеет максимальный приоритет 2147483647 (2^31-1). Вы можете установить это значение тоже. Если приоритеты совпадают, ОС Android будет обслуживать "старое" приложение, которое вы установили первым. Я говорю это из моего опыта, я не могу сказать, что Google по этому вопросу.