В документации по Android (https://developer.android.com/guide/components/broadcasts#receiving-broadcasts-permissions) написано:
Если вы указали параметр разрешения при регистрации трансляции
приемник (либо с помощью registerReceiver (BroadcastReceiver,
IntentFilter, String, Handler) или в теге вашего манифеста),
тогда только вещатели, которые запросили разрешение с
тег в своем манифесте (и впоследствии был предоставлен
разрешение, если оно опасно) может отправить намерение получателю.
Но когда я указываю разрешение SEND_SMS в теге получателя, получатель все равно получает широковещательные сообщения, даже если мое приложение не имеет разрешения SEND_SMS .
Я зарегистрировал получателя в манифесте Android:
<receiver android:name=".Demo"
android:permission="android.permission.SEND_SMS">
<intent-filter>
<action android:name="demoFilter"/>
</intent-filter>
</receiver>
Демонстрационный класс:
package com.android.wave;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class Demo extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, intent.getStringExtra("Data"), Toast.LENGTH_LONG).show();
}
}
И я отправляю трансляцию в методе onCreate моей MainActivity:
sendBroadcast(new Intent("demoFilter").putExtra("Data", "some data"));
Разрешения для моего приложения:
Когда запускается mainActivity, я получаю тостовое сообщение "Некоторые данные". Что я не должен получать, так как мое приложение не имеет разрешения, которое требуется получателю.