Как установить разрешения в широковещательном отправителе и получателе в android
Как мы указываем в широковещательном приложении для передачи, какое приложение может получать эту широковещательную рассылку, и в приеме приложения, какое конкретное приложение имеет разрешение на отправку широковещательной передачи на свой широковещательный приемник...
Я новичок в android. Я читаю документацию и т.д. в Интернете, но не могу найти синтаксис для указания этих разрешений.
Ответы
Ответ 1
используйте фильтр намерений в теге получателя в манифесте
<receiver
android:name="Your receiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="action"/>
<category android:name="category" />
</intent-filter>
</receiver>
Чтобы отправить трансляцию в приложение
Intent intent = new Intent();
intent.setAction("use same action in receiver");
intent.addcategory("use same category in receiver");
context.sendBroadcast(intent);
Ответ 2
Чтобы контролировать, кто может принимать широковещательное сообщение, вы можете использовать метод sendBroadcast:
public abstract void sendBroadcast (Intent intent, String receiverPermission)
где вы точно указываете имя требуемого разрешения. Если получатель не объявит это разрешение, он не сможет получить сообщение. Например, отправитель вещания может:
Intent broadcast = new Intent(this, MyBroadcastReceiver.class);
sendBroadcast(broadcast, "andro.jf.mypermission");
В манифесте отправителя трансляции должно быть объявлено новое разрешение:
<!-- Declaring the special permission -->
<permission android:name="andro.jf.mypermission"
android:label="my_permission"
android:protectionLevel="dangerous"></permission>
Затем в приложении, которое должно получать эту трансляцию, вы должны объявить это разрешение и сказать, что используете его. В манифесте вы можете добавить:
<!-- I use the permission ! -->
<uses-permission android:name="andro.jf.mypermission"/>
и, конечно же, вы должны объявить своего вещательного приемника:
<receiver android:name="MyBroadcastReceiver" android:exported="true" />
Вы можете посмотреть этот пост для полного примера пользовательского разрешения, а также страница разработчиков Android об этом. Будьте осторожны с порядком установки ваших приложений, потому что тот, который определяет разрешение должен быть установлен первым.
Ответ 3
Если вы хотите ограничить, кто может отправлять намерения вашему широковещательному приемнику, сделайте это следующим образом:
Широковещательный приемник:
<manifest ...>
<!-- Permission declaration -->
<permission android:name="my.app.PERMISSION" />
<receiver
android:name="my.app.BroadcastReceiver"
android:permission="my.app.PERMISSION"> <!-- Permission enforcement for delivering intents to this receiver -->
<intent-filter>
<action android:name="my.app.Action" />
</intent-filter>
</receiver>
...
</manifest>
Передача отправителя:
<manifest ...>
<!-- We declare we own the permission to send broadcast to the above receiver -->
<uses-permission android:name="my.app.PERMISSION" />
...
</manifest>
Отправка широковещательной передачи из отправителя в приложение :
Intent intent = new Intent();
intent.setAction("my.app.Action");
activity.sendBroadcast(intent);
Если вы объявите такое разрешение следующим образом:
<permission android:protectionLevel="signature" android:name="my.app.PERMISSION" />
Затем отправитель сможет получить это разрешение только тогда, когда подписчики отправителя и получателя подписаны одним и тем же сертификатом разработчика.
Ответ 4
Объявить разрешение
Сначала вам нужно объявить свое разрешение в AndroidManifest.xml
<permission android:name="YOUR_PERMISSION_STRING" android:protectionLevel="signature"/>
<uses-permission android:name="com.codylab.photogallery.PRIVATE"/>
the android:name
Значение используется как значение разрешения и будет использоваться позже.
Использование
Существует два типа разрешений, связанных с широковещательным приемником:
(1) Определите, какое приложение может получать вашу трансляцию:
String PERMISSION_STRING_PRIVATE_RECEIVER = "YOU_NEED_THIS_TO_RECEIVE_THIS_BROADCAST"
sendBroadcast(intent, PERMISSION_STRING_PRIVATE_RECEIVER);
При таком использовании вы можете управлять только авторизованным приложением, которое может обрабатывать переданную вами трансляцию.
(2) Только обрабатывать широковещательные передачи имеют указанное разрешение
String PERMISSION_STRING_PRIVATE_BROADCASTER = "ONLY HANDLE BROADCASTS WITH THIS PERMISSION"
IntentFilter filter = new IntentFilter(ACTION_SAMPLE);
registerReceiver(mReceiver, filter, PERMISSION_STRING_PRIVATE_BROADCASTER, null);
При таком использовании вы можете убедиться, что вещательная компания авторизована.
Ответ 5
После полудня поиска и теста на основе ответа @JFL я обнаружил, что приложение-отправитель должно добавить тег <permission>
и тег <uses-permission>
, тогда получатель может получать широковещательную передачу с разрешения. В противном случае приложение-получатель не получит широковещательную передачу.