我有一个短信来电号码123456
。我想使用 Intent 在服务中打开传入电话号码的 SMS 消息。我尝试了两种方法,但它们给出了不满意的结果
第一种方式:
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);
方式只打开短信列表。我们必须查看列表中的来电电话,并且需要多一步才能打开来电短信电话的内容。我想忽略这一步。这意味着它将直接进入传入的短信电话号码的内容。
第二种方式:
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 中做到这一点?谢谢大家
该问题与如何打开短信意图阅读(不发送)消息有关?. 不同的是提供两种情况的源代码:一种是需要多一步的读取模式(第一种),另一种是发送模式。
更新:这就是我获取短信传入电话号码的方式
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();
}
}
}
}