Moja aplikacja musi być w stanie odbierać wiadomości SMS. To wszystko działa, ale pojawia się to ostrzeżenie niestrzępiącą:Jak naprawić niezabezpieczony SMS BroadcastReceiver lint warning
BroadcastReceivers że zadeklarować intent-filtr dla SMS_DELIVER lub SMS_RECEIVED musi zapewnić, że rozmówca ma BROADCAST_SMS zgody, w przeciwnym razie możliwe jest złośliwe aktorzy sfałszować zamiary.
Jak "upewnić się, że abonent wywołujący ma uprawnienie BROADCAST_SMS"?
W moim manifeście mam:
<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>
Mój kod:
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
}
}
}
}
Dlaczego potrzebne to uprawnienie? – UnKnown
@UnKnown Atrybut 'permission' na' 'określa, jakie uprawnienia musi posiadać _sender_ programu broadcast, aby mógł nadawać do twojego' '. To środek bezpieczeństwa; w tym przypadku, możesz więc być względnie pewny, że to system wysyła transmisję "SMS_RECEIVED". Nie jest to bezwzględnie wymagane, ale lint będzie narzekać, jeśli go nie ma. –