2016-06-01 7 views
0

会話で同じメッセージを2回受信しています。Android .... SMS受信機に問題があります。メッセージを2回受信します

おそらく、私は受信機に何か問題があります。

私を見つけるのを助けますか?

public class SmsReceiver extends BroadcastReceiver { 

private final String TAG = "MessagingReceiver"; 

    private Context mContext; 
    private SharedPreferences mPrefs; 

    private String mAddress; 
    private String mBody; 
    private long mDate; 

    private Uri mUri; 

    public static final String SMS_URI = "content://sms"; 
    public static final Uri RECEIVED_MESSAGE_CONTENT_PROVIDER = Uri.parse("content://sms/inbox"); 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(TAG, "onReceive"); 
     abortBroadcast(); 

     mContext = context; 
     mPrefs = PreferenceManager.getDefaultSharedPreferences(context); 

     if (intent.getExtras() != null) { 
      Object[] pdus = (Object[]) intent.getExtras().get("pdus"); 
      SmsMessage[] messages = new SmsMessage[pdus.length]; 

      for (int i = 0; i < messages.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 

      SmsMessage sms = messages[0]; 

      if (messages.length == 1 || sms.isReplace()) { 
       mBody = sms.getDisplayMessageBody(); 
      } else { 
       StringBuilder bodyText = new StringBuilder(); 
       for (SmsMessage message : messages) { 
        bodyText.append(message.getMessageBody()); 
       } 
       mBody = bodyText.toString(); 
      } 

      mAddress = sms.getDisplayOriginatingAddress(); 
      mDate = sms.getTimestampMillis(); 

      addMessageToInbox(mContext, mAddress, mBody, mDate); 
     } 
    } 

    public static Uri addMessageToInbox(Context context, String address, String body, long time) { 

     ContentResolver contentResolver = context.getContentResolver(); 
     ContentValues cv = new ContentValues(); 

     cv.put("address", address); 
     cv.put("body", body); 
     cv.put("date_sent", time); 

     return contentResolver.insert(RECEIVED_MESSAGE_CONTENT_PROVIDER, cv); 
    } 
} 

たManifest.xml

<receiver android:name=".SmsReceiver"  
    android:permission="android.permission.BROADCAST_SMS"> 
    <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />   
    </intent-filter> 
</receiver> 
+0

onReceive()が2回呼び出されたかどうかを確認しましたか?いくつかのログメッセージを入れて、onReceive()が2回呼び出されたかどうかをチェックする...インテントフィルタを定義するマニフェストを共有する – W0rmH0le

+0

もう一つの点:onReceive: "Log.d(" TEST "、intent。 getAction()); "このようにして、同じアクションを2回受け取ったか、アクションが異なるかどうかを確認できます。ブロードキャストをマニフェスト(インテントフィルタ)に登録するか、登録したかどうかを確認してください。 – W0rmH0le

+0

onReceive()で受け取ったアクションをチェックしましょう(また、あなたのmanifest.xmlを共有します - インテントフィルタを定義する部分だけ) – W0rmH0le

答えて

0

実は、私はonReceive()を2回呼び出していました。一度、上記の放送受信機に入ってください。第二に、この放送受信機を別の受信機に拡張しています。それがダブルメッセージの背後にある理由です。

関連する問題