2

我需要从不同类型的意图中检索电话号码。案例的意图如下:

Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address","phoneNumber");         
smsIntent.putExtra("sms_body","message");
startActivity(smsIntent);

或者:

Intent sms_intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:xxxxxxxxxx"); 
sms_intent.putExtra("sms_body", "This is my message!"); 
startActivity(sms_intent);

当我开始新活动时,我会得到我的捆绑附加服务:

Bundle extras = getIntent().getExtras();
    if (extras != null) {
        //some code
    }

具体来说,对于第一种情况,意图显式绑定一个额外的密钥,"address"我这样做:

extra_phoneNumber = extras.getString("address");

但是我在尝试smsto:在第二个意图案例之后检索值时遇到了一些麻烦。

我已经尝试通过以下方式迭代捆绑附加功能:

for (String key : bundle.keySet()) {
Object value = bundle.get(key);
Log.d(TAG, String.format("%s %s (%s)", key,  
    value.toString(), value.getClass().getName()));

}

但如果附加项是空的,这给我一个 NPE。

由于谷歌本身缺乏文档,我找不到任何东西,所以任何答案都会非常有帮助!提前致谢。

4

2 回答 2

1

我建议您通过调试器检查第二种情况意图如何查看内部。除了 extras 之外,还有其他字段可以存储信息。请检查Intent.getData()Intent.getDataString()

于 2015-07-30T13:23:35.477 回答
0

你可以试试这段代码:

SmsMessage[] msgs = null;
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
          msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
          msg_from = msgs[i].getOriginatingAddress();
          String msgBody = msgs[i].getMessageBody();
          Log.d("resulty", "Message From: " + msg_from + " and it says: " + msgBody);          
}

于 2015-07-30T14:01:12.740 回答