我有一個短信傳入電話號碼123456
。我想用Intent在服務中打開傳入電話號碼的SMS消息。我嘗試了兩種方式,但他們給不滿意結果在閱讀模式Android 5.0中無法閱讀短信?
第一種方式:
Intent smsIntent = new Intent(Intent.ACTION_MAIN);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(smsIntent);
的方式只打開短信列表。我們必須查看列表中的傳入電話,並需要一個步驟才能打開傳入的SMS電話的內容。我想忽略這一步。這意味着它會直接轉到收到的短信電話號碼的內容。
方式二:
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", SMSphoneNumber);
smsIntent.putExtra("sms_body",SMSBody);
smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(smsIntent);
這樣可以讀取傳入的短信電話號碼的細節,但它在發送模式。我想在閱讀模式下閱讀短信。
如何在Android L中執行此操作?謝謝大家
這個問題與How to open SMS intent to read (not send) message?有關。不同的是爲兩種情況提供源代碼:一種是閱讀模式(第一種),需要多一步,另一種是發送模式。
更新:這是什麼方式我得到的短信來電號碼
public class SMSReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle extras = intent.getExtras();
SmsMessage[] smgs = null;
String infoSender = "";
String infoSMS = "";
if (extras != null) {
// Retrieve the sms message received
Object[] pdus = (Object[]) extras.get("pdus");
smgs = new SmsMessage[pdus.length];
for (int i = 0; i < smgs.length; i++) {
smgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
infoSender += smgs[i].getOriginatingAddress();
if (smgs[i].getMessageBody()!=null)
infoSMS += smgs[i].getMessageBody().toString();
else
infoSMS += ".";
}
Toast.makeText(context, "Phone in SMSReceiver is -" + infoSender + "Body is" + infoSMS, Toast.LENGTH_SHORT).show();
}
}
}
}
你的問題不清楚。你想獲得數字和消息正文,並過濾一個特定的數字? –
我已經有了BroadcastReceiver的號碼和身體。我只想在閱讀模式下打開傳入電話號碼的短信。 – Jame
可能重複[如何打開SMS意圖閱讀(不發送)消息?](http://stackoverflow.com/questions/39678042/how-to-open-sms-intent-to-read-not-send-消息) –