La mia app deve essere in grado di ricevere messaggi SMS. E tutte le opere, ma ottengo questo lint avvertimento:Come risolvere Avviso SMS ignifugo BroadcastReceiver non protetto
BroadcastReceivers che dichiarano un intent-filtro per Distribuzione_di_SMS o SMS_RECEIVED deve garantire che il chiamante ha la BROADCAST_SMS il permesso, altrimenti è possibile che gli attori malintenzionati di falsificare intenti.
Come "assicurarmi che il chiamante abbia l'autorizzazione BROADCAST_SMS"?
Nel mio manifesto ho:
<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>
Il mio codice:
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
}
}
}
}
Perché questa autorizzazione richiesta? – UnKnown
@UnKnown L'attributo 'permesso' su un' 'specifica quale permesso deve essere conservato _sender_ della trasmissione in modo che sia in grado di trasmettere al tuo' '. È una misura di sicurezza; in questo caso, quindi puoi essere relativamente certo che il sistema sta inviando la trasmissione "SMS_RECEIVED'. Non è strettamente richiesto, ma lint si lamenterà se non è lì. –