12

私のアプリはSMSメッセージを受信できる必要があります。それはすべての作品が、私はこの糸くずの警告を取得:SMS_DELIVERまたは SMS_RECEIVEDのために意図-フィルタを宣言保護されていないSMS BroadcastReceiverリント警告の修正方法

BroadcastReceiversは、発信者がBROADCAST_SMS 許可を持っていることを確認する必要がありますが、悪質な俳優が を偽装するために、それ以外の場合は可能ですインテント。

「発信者にBROADCAST_SMS権限があることを確認する」方法を教えてください。

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

マイコード::私は私のマニフェストで

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

答えて

20

は、開口部<receiver>タグにandroid:permission="android.permission.BROADCAST_SMS"を追加します。

また、コンポーネントはデフォルトで有効になっており、<intent-filter>はそれをエクスポートするため、これらの属性を明示的に含める必要はありません。

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

この権限が必要なのはなぜ? – UnKnown

+1

@UnKnown ''の 'permission'属性は、' 'にブロードキャストできるように、ブロードキャストの_sender_が保持する必要があるアクセス許可を指定します。それは安全対策です。この場合、システムが 'SMS_RECEIVED'ブロードキャストを送信していることが比較的確実に確認できます。それは厳密には要求されていませんが、リントはそこになければ文句を言います。 –

0

マイコード:

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 
     } 
    } 
} 
} 
関連する問題