Android短信内容(内容://短信/发送)

我在阅读设备的短信时遇到问题。 当为URI“ content://sms/inbox ”获取内容提供者时,一切都很好,我可以通过阅读“person”列来find人员表中的外键,并最终到达联系人和他们的姓名。

但是,我也想遍历发送的消息。 当从“content:// sms / sent”读取时,人员字段始终显示为0.这是正确的字段正在阅读以find发送的邮件的收件人数据? 如果是的话 – 任何想法,为什么我的总是0?

我所有的testing都在模拟器中完成,我创build了3个联系人。 我以正常的方式将消息发送给模拟器​​中的联系人。

只是重申,我可以看到4个发送的消息,并阅读相关的正文文本。 我的问题是,我似乎无法读取“人”的身份证,因此我无法确定收件人是谁。

任何帮助将不胜感激。

非常感谢,

马丁。

Solutions Collecting From Web of "Android短信内容(内容://短信/发送)"

使用地址栏。 我想人名列被忽略,因为人们可以发送短信到不在联系人列表中的电话号码。

 // address contains the phone number Uri phoneUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, address); if (phoneUri != null) { Cursor phoneCursor = getContentResolver().query(phoneUri, new String[] {Phones._ID, Contacts.Phones.PERSON_ID}, null, null, null); if (phoneCursor.moveToFirst()) { long person = phonesCursor.getLong(1); // this is the person ID you need } } 

这里即时通讯附加代码,我已经写了发送味精给我从电话簿中select的用户

 addcontact.setOnClickListener(new View.OnClickListener() { public void onClick(View V) { Intent ContactPickerIntent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); startActivityForResult(ContactPickerIntent, CONTACT_PICKER_RESULT); } } ); 

这将打开联系人列表…………………………

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case CONTACT_PICKER_RESULT: Cursor cursor=null; try { Uri result = data.getData(); Log.v(DEBUG_TAG, "Got a contact result: " + result.toString()); // get the contact id from the Uri String id = result.getLastPathSegment(); // query for everything contact number cursor = getContentResolver().query( Phone.CONTENT_URI, null, Phone.CONTACT_ID + "=?", new String[]{id}, null); cursor.moveToFirst(); int phoneIdx = cursor.getColumnIndex(Phone.DATA); if (cursor.moveToFirst()) { phonenofromcontact = cursor.getString(phoneIdx); finallistofnumberstosendmsg +=","+phonenofromcontact; Log.v(DEBUG_TAG, "Got email: " + phonenofromcontact); } else { Log.w(DEBUG_TAG, "No results"); } } catch(Exception e) { Log.e(DEBUG_TAG, "Failed to get contact number", e); } finally { if (cursor != null) { cursor.close(); } } phonePhoneno= (EditText)findViewById(R.id.Phonenofromcontact); phonePhoneno.setText(finallistofnumberstosendmsg); //phonePhoneno.setText(phonenofromcontact); if(phonenofromcontact.length()==0) { Toast.makeText(this, "No contact number found for this contact", Toast.LENGTH_LONG).show(); } break; } } else { Log.w(DEBUG_TAG, "Warning: activity result not ok"); } } 

这是你如何处理和从电话簿中获得电话号码………………………………. ………………………..

现在呼叫发送信息的号码和味精列表设置..

 private void sendSMS(String phoneNumber, String message) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0); //---when the SMS has been sent--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show(); break; } } },new IntentFilter(SENT)); //---when the SMS has been delivered--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); } 

这将发送消息……………………………..你需要接收者收到广播的消息

 public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //---get the SMS message passed in--- Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; String str = ""; if (bundle != null) { //---retrieve the SMS message received--- Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int i=0; i<msgs.length; i++) { msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); str += "SMS from " + msgs[i].getOriginatingAddress(); str += " :"; str += msgs[i].getMessageBody().toString(); str += "\n"; } //---display the new SMS message--- Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } } } 

你也可以尝试一下。 它适用于我..谢谢