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>
onReceive()가 두 번 호출되었는지 확인 했습니까? 일부 로그 메시지를 넣고 onReceive()가 두 번 호출되는지 확인하십시오 ... 또한 intent-filter를 정의하는 곳에서 매니페스트를 공유하십시오. – W0rmH0le
다른 지점 : onReceive : "Log.d ("TEST ", intent. getAction()); " 이렇게하면 동일한 작업을 두 번 받았는지 또는 작업이 다른지 확인할 수 있습니다. 브로드 캐스트를 매니페스트 (인 텐트 필터)에만 등록하거나 두 번 등록한 경우에도 확인하십시오 – W0rmH0le
그레이트 .. onReceive()에서받은 작업 (manifest.xml을 공유 함 - 의도 필터를 정의한 부분 만 확인하십시오) – W0rmH0le