Intereting Posts
Проблемы с подключением USB 6 Nexus 5 USB Программно добавлять фрагменты в группу просмотра Загружать захваченное изображение в Cloudinary прямо в Android Полезно ли вызывать findViewById каждый раз в жизненном цикле активности, когда это требуется? HandlerThread vs Executor – Когда еще один подход к другому? Android с использованием Intellij версии 14 – Обновление XML-ссылок только в текущем файле ресурсов XML SPH-L710 (Sprint Galaxy S III), работающий на 4.4.2, неверно сообщает xdpi и ydpi Установите громкость приложения для Android Android-залп отправляет информацию дважды с загрузкой изображения Измерение ширины текста на Canvas (Android) Нужно запустить приложение сразу после завершения загрузки Почему вызов Process.killProcess (Process.myPid ()) – плохая идея? Фрагментный стандартный переход не оживляющий Последний элемент списка Listview отключен Почему getCount в адаптере вызывается так много раз?

Как установить разрешения в широковещательном отправителе и получателе в android

Как мы указываем в широковещательном отправителе, какое приложение может получать эту широковещательную рассылку, и в приеме приложения, какое конкретное приложение имеет разрешение на отправку широковещательной передачи на свой широковещательный приемник …

Я новичок в android. Я читаю документацию и т. Д. В Интернете, но не могу найти синтаксис для указания этих разрешений.

Использовать фильтр намерений в теге приемника в манифесте

<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); 

Чтобы контролировать, кто может принимать широковещательное сообщение, вы можете использовать метод 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 . Будьте осторожны с порядком установки ваших приложений, потому что тот, который определяет разрешение, должен быть установлен первым .

Если вы хотите ограничить, кто может отправлять намерения вашему широковещательному приемнику, сделайте это так:

Широковещательный приемник :

 <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" /> 

Затем отправитель сможет получить это разрешение только тогда, когда и отправитель, и приложения- получатели подписываются одним и тем же сертификатом разработчика.

Объявить разрешение

Сначала вам нужно объявить свое разрешение в своем 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); 

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

После полудня поиска и теста, основанного на ответе @ JFL, я обнаружил, что приложение-отправитель должно добавить <permission> тег <uses-permission> , тогда получатель может получать широковещательную передачу с разрешения. В противном случае приложение-получатель не получит широковещательную передачу.