Ứng dụng của tôi cần có thể nhận tin nhắn SMS. Tất cả các công trình, nhưng tôi nhận được cảnh báo lint này:Cách khắc phục cảnh báo lint SMS BroadcastReceiver không được bảo vệ
BroadcastReceivers rằng tuyên bố một ý định lọc cho SMS_DELIVER hoặc SMS_RECEIVED phải đảm bảo rằng người gọi có BROADCAST_SMS phép, nếu không nó có thể cho các diễn viên độc hại giả mạo ý định.
Làm cách nào để "đảm bảo người gọi có quyền BROADCAST_SMS"?
Trong manifest của tôi, tôi có:
<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ã của tôi:
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
}
}
}
}
Tại sao sự cho phép này yêu cầu? – UnKnown
@UnKnown Thuộc tính 'permission' trên' 'chỉ định quyền nào _sender_ của chương trình phát sóng phải giữ để nó có thể phát sóng tới' 'của bạn. Đó là một biện pháp an ninh; trong trường hợp này, vì vậy bạn có thể tương đối chắc chắn rằng hệ thống là ai đang gửi phát 'SMS_RECEIVED'. Nó không phải là bắt buộc, nhưng lint sẽ khiếu nại nếu nó không có ở đó. –