2016-06-01 18 views
0

receiver..Receiving I gleiche Nachricht zweimal in einem Gespräch empfängt.Android .... Stimmt etwas nicht mit meiner SMS-Nachrichten zweimal

Vielleicht, ich habe etwas falsch in meinem Empfänger.

Würde mir bitte helfen zu finden?

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

Haben Sie überprüft, ob OnReceive() zweimal aufgerufen wird? Setzen Sie einige Protokollnachrichten und überprüfen Sie, ob onReceive() zweimal aufgerufen wird ... teilen Sie auch Ihr Manifest, wo Sie den intent-filter definieren – W0rmH0le

+0

Ein weiterer Punkt: Drucken Sie die in onReceive empfangene Aktion: "Log.d (" TEST ", intent. getAction()); " Auf diese Weise können Sie sehen, ob Sie die gleiche Aktion zweimal erhalten ... oder wenn die Aktion anders ist .... Überprüfen Sie auch, ob Sie Ihre Übertragung nur im Manifest (Absichtsfilter) registrieren oder wenn Sie sie zweimal registriert haben – W0rmH0le

+0

Groß .. Lassen Sie uns überprüfen, welche Aktion Sie in onReceive() erhalten haben (teilen Sie auch Ihre manifest.xml - nur den Teil, wo Sie den Intent-Filter definieren). – W0rmH0le

Antwort

0

Eigentlich hatte ich OnReceive angerufen (zweimal). Einmal in dem obigen Rundfunkempfänger. Zweitens erweitere ich diesen Rundfunkempfänger auf einen anderen Empfänger. Und das ist der Grund für doppelte Nachrichten