Как я могу указать специфическую часть схемы в теге данных для фильтрации Intent-Filter?

StackOverflow https://stackoverflow.com/questions/2193716

Вопрос

Я хочу настроить широкообразование, чтобы обрабатывать Package_Reacted, но я только хочу быть уведомлен, когда моя посылка заменена. Он отлично работает, если я указываю тег данных со схеме = «Пакет», но тогда я получаю уведомление, когда любое приложение переустановлено или обновлено. Я не могу выяснить, как я должен указывать имя пакета, которое находится в специфической части схемы - то есть, когда мой широкоструйный корабль получает намерение в Onrecieve (), если я делаю Intent.getData (). GetschemeSpecificpart ), это имя пакета, но есть ли, я могу отфильтровать только то, что в моем намерении фильтра?

Это было полезно?

Решение

Проще всего будет принимать какие-либо широковещательные намерения с package Схема, как вы говорите, но сделайте фильтрацию на основе Intent дополнения, которые отправляются с PACKAGE_* Действия.

Если имя пакета в Intent Не соответствует вашему, просто игнорируйте это.

Другие советы

Как использовано в приложении поиска Google:

<intent-filter>
  <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
  <data android:scheme="package" android:path="com.google.android.googlequicksearchbox" /> 
</intent-filter>

Но согласно моим грубым тестам, это все еще может уловить любой обновленный пакет, который делает часть «Android: Path» на самом деле бесполезной.

Для Android 3.1+ вы можете использовать это новое действие, чтобы ответить только тогда, когда ваш пакет обновляется:

<intent-filter>
  <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
</intent-filter>

Если вам придется поддержать обратно на Android 2.x, лучшая практика - объявить 2 отдельных приемника для PACKAGE_REPLACED а также MY_PACKAGE_REPLACED. Отказ Затем после первого запуска проверяйте версию Runtime Android и отключите старую, если версия 3.1+.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top