Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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>, тогда получатель может получать широковещательную передачу с разрешения. В противном случае приложение-получатель не получит широковещательную передачу.