12

Мое приложение должно иметь возможность получать SMS-сообщения. Это все работает, но я получаю это предупреждение ворса:Как исправить Незащищенный SMS BroadcastReceiver предупреждение ворса

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 
      } 
     } 
    } 
} 

ответ

20

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

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

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

Почему требуется такое разрешение? – UnKnown

+1

@UnKnown Параметр 'permission' атрибут для' ' определяет, какой разрешение _sender_ радиопередачи должны иметь для того, чтобы иметь возможность транслировать в свой' '. Это мера безопасности; в этом случае, поэтому вы можете быть уверены, что система - это кто отправляет трансляцию SMS_RECEIVED. Это строго не требуется, но lint будет жаловаться, если его там нет. –

0

Мой код:

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 
     } 
    } 
} 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^