Meine App muss SMS empfangen können. Es funktioniert alles, aber ich habe diese Flusen Warnung:So beheben Sie ungeschützte SMS BroadcastReceiver Flusenwarnung
BroadcastReceivers, die eine Intent-Filter für SMS_DELIVER oder SMS_RECEIVED erklären müssen sicherstellen, dass der Anrufer die BROADCAST_SMS Erlaubnis hat, sonst ist es möglich, für böswillige Akteure zu fälschen Absichten.
Wie kann ich sicherstellen, dass der Anrufer über die Berechtigung BROADCAST_SMS verfügt?
In meinem Manifest habe ich:
<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>
Mein Code:
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
}
}
}
}
Warum diese Berechtigung erforderlich? – UnKnown
@UnKnown Das Attribut 'permission' auf einem' 'gibt an, welche Berechtigung der _sender_ der Broadcast haben muss, damit er in der Lage ist, an Ihre' ' zu senden. Es ist eine Sicherheitsmaßnahme; In diesem Fall können Sie relativ sicher sein, dass das System die Sendung "SMS_RECEIVED" sendet. Es ist nicht unbedingt erforderlich, aber Lint wird sich beschweren, wenn es nicht da ist. –