12

Uygulamamın SMS mesajları alabilmesi gerekiyor. Kötü niyetli aktörler taklit etmesi aksi takdirde mümkündür SMS_DELIVER için niyet-filtre ilan veya SMS_RECEIVED Arayan BROADCAST_SMS iznine sahip olduğundan emin olmalıdırKorumasız SMS Yayını nasıl çözülür Receiver lint warning

Yayın Alıcılarının: Tüm çalışır, ancak bu tüysüz uyarıyı almak Intents'in.

Arayanın BROADCAST_SMS iznine sahip olduğundan nasıl emin olabilirim? Benim Manifest'te

Ben:

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

Kodum:

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

cevap

20

açılış <receiver> etiketine android:permission="android.permission.BROADCAST_SMS" ekleyin. Ayrıca, bileşenler varsayılan olarak etkinleştirilmiştir ve <intent-filter> bunu dışa aktarır, dolayısıyla bu özellikleri açıkça içermeniz gerekmez.

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

Neden bu izin gerekli? – UnKnown

+1

@UnKnown Bir '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' yayınına izin verebilmesi için yayının _sender_ 'inin hangi izni vermesi gerektiğini belirtir. Bu bir güvenlik önlemi; Bu durumda, sistemin "SMS_RECEIVED" yayınını kimin gönderdiğini göreceli olarak emin olabilirsiniz. Bu kesinlikle gerekli değildir, ancak orada değilse lint şikayet edecektir. –

0

Kodum:

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