2015-07-30 3 views
2

Мне нужно получить номер телефона из разных типов намерений. Случаи намерения как:Получить sms-адрес из данных о намерениях

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.

Я не мог найти ничего из-за отсутствия документации от самого Google, поэтому любой ответ был бы действительно полезен! Спасибо заранее.

+1

Я предлагаю вам проверить, как это второй случай, намерение заглянуть внутрь через отладчик. Существуют другие поля, кроме дополнительных, где информация может быть сохранена. См. Http://developer.android.com/reference/android/content/Intent.html#getData%28%29, возможно, это поможет – mhenryk

+0

Perfect! .getDataString() работал! Я честно пытался позвонить getData() раньше, но я вызывал его на неправильный объект. Пожалуйста, напишите это как ответ, чтобы я мог отметить его правильно, чтобы помочь другим с той же проблемой! – Matteo

ответ

1

Предлагаю вам проверить, как 2-й случай намерен заглянуть внутрь через отладчик. Существуют другие поля, кроме дополнительных, где информация может быть сохранена. Пожалуйста, проверьте Intent.getData() или Intent.getDataString()

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);   
 
}

Смежные вопросы