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

Как устранить неповрежденное предупреждение SMS BroadcastReceiver

Мое приложение должно получать SMS-сообщения. Все это работает, но я получаю это предупреждение:

BroadcastReceivers, которые объявляют фильтр намерений для SMS_DELIVER или SMS_RECEIVED должен гарантировать, что у вызывающего есть BROADCAST_SMS разрешения, в противном случае злоумышленники могут обманывать намерения.

Как я могу обеспечить, чтобы вызывающий абонент имел разрешение BROADCAST_SMS?

В моем манифесте я:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application ...>
    <receiver
        android:name=".SmsReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
</application>

Мой код:

public class SmsReceiver extends BroadcastReceiver {
    public SmsReceiver() {}

    @Override
    public void onReceive(final Context context, final Intent intent) {

        final Bundle bundle = intent.getExtras();
        if (bundle != null) {
            final Object[] pdusObj = (Object[]) bundle.get("pdus");
            for (int i = 0; i < pdusObj.length; i++) {
                final SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                // use currentMessage
            }
        }
    }
}
4b9b3361

Ответ 1

Добавьте android:permission="android.permission.BROADCAST_SMS" в открывающий тег <receiver>.

Кроме того, компоненты по умолчанию включены, а <intent-filter> экспортирует его, поэтому вам не нужно явно включать эти атрибуты.

<receiver
    android:name=".SmsReceiver"
    android:permission="android.permission.BROADCAST_SMS">