setPackage для намерения в прянике - PullRequest
4 голосов
/ 21 февраля 2012

В соответствии с документацией для Android :

В качестве альтернативы, начиная с ICE_CREAM_SANDWICH, вы также можете безопасно ограничить трансляцию одним приложением с помощью Intent.setPackage

* 1007.*

Есть ли способ в Gingerbread (возможно, с использованием библиотеки совместимости) ограничить событие sendBroadcat () так, чтобы оно отправляло его только в указанный пакет?

Ответы [ 3 ]

4 голосов
/ 10 марта 2012

Моим первым предложением было бы использовать LocalBroadcastManager , если это вообще возможно. Это позволяет полностью игнорировать любые проблемы безопасности.

Если вам действительно нужно отправить широковещательную рассылку из одного приложения в другое, это действительно так, что registerReceiver () не соблюдал ограничение setPackage до ICS, поэтому вы не можете полагаться на него до тех пор. Нет секретного трюка, чтобы делать то, что вы хотите, просто у платформы нет возможности для этого.

Тем не менее ... если вам нужно указать явное имя пакета, почему бы просто не пройти весь путь и использовать Intent.setComponent () ?

Также имейте в виду, что даже setPackage () или setComponent () не являются автоматически полностью безопасными - вы все еще предполагаете, что знаете, кто реализует это имя пакета, и это вполне возможно для приложения, отличного от того, что вы ожидаете установки через боковую загрузку, даже если у вас есть имя в Play Store.

1 голос
/ 21 февраля 2012

В документах говорится, что setPackage был введен в API Level 4, но, возможно, произошло изменение в структуре, которое делает его функционирование другим / лучше в ICS. А как насчет создания собственного Intent Filter , который распознают ваши получатели? Пример NotePad в нижней части этой страницы показывает пример: в манифесте пример NoteEditor указывает

<action android:name="com.android.notepad.action.EDIT_NOTE" />

- это пользовательское действие, определенное приложением.

0 голосов
/ 21 февраля 2012

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

Если вы действительно заинтересованы в обеспечении безопасности трансляции, вы можете следовать предложению Android-документации для версий до Android 4.0, используя разрешения:

Для принудительного разрешения при отправке вы задаете ненулевой аргумент разрешения для sendBroadcast(Intent, String) или sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle). Только получатели, которым было предоставлено это разрешение (запросив его с тегом в своем AndroidManifest.xml), смогут получать трансляцию.

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