2016-06-01 4 views
0

대화에서 같은 메시지를 두 번 받았습니다.Android .... 내 SMS 수신자에 문제가 발생했습니다. 두 번 메시지 받기

어쩌면, 나는 내 수신기에 뭔가 잘못되어있을 수 있습니다.

찾도록 도와주세요.

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()가 두 번 호출되었는지 확인 했습니까? 일부 로그 메시지를 넣고 onReceive()가 두 번 호출되는지 확인하십시오 ... 또한 intent-filter를 정의하는 곳에서 매니페스트를 공유하십시오. – W0rmH0le

+0

다른 지점 : onReceive : "Log.d ("TEST ", intent. getAction()); " 이렇게하면 동일한 작업을 두 번 받았는지 또는 작업이 다른지 확인할 수 있습니다. 브로드 캐스트를 매니페스트 (인 텐트 필터)에만 등록하거나 두 번 등록한 경우에도 확인하십시오 – W0rmH0le

+0

그레이트 .. onReceive()에서받은 작업 (manifest.xml을 공유 함 - 의도 필터를 정의한 부분 만 확인하십시오) – W0rmH0le

답변

0

사실, 난()를 두 번 onReceive를 호출했다. 위의 브로드 캐스트 리시버에 한번. 두 번째로, 나는이 브로드 캐스트 리시버를 다른 리시버로 확장하고있다. 그게 이중 메시지 뒤에있는 이유입니다.