【发布时间】:2015-07-30 09:55:42
【问题描述】:
我需要从不同类型的意图中检索电话号码。 案例的意图如下:
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。
由于谷歌本身缺乏文档,我找不到任何东西,所以任何答案都会非常有帮助! 提前致谢。
【问题讨论】:
-
我建议您通过调试器检查第二种情况意图如何查看内部。除了 extras 之外,还有其他字段可以存储信息。见developer.android.com/reference/android/content/…也许这会有所帮助
-
完美! .getDataString() 有效!老实说,我之前曾尝试调用 getData(),但我在错误的对象上调用它。请将此写为答案,以便我可以将其标记为正确,以帮助其他有同样问题的人!
标签: android android-intent extras android-bundle