我如何使用“content:// sms / inbox”获取SMS发件人联系人(Person)保存的名称

在我的应用程序,我想检索的SMS发件人保存名称使用下面的代码,但它总是返回null。 请build议我最方便的方式来获取发件人的名字。

Uri SMS_INBOX = Uri.parse("content://sms/inbox"); Cursor c = getContentResolver().query(SMS_INBOX, null, null, null, null); android.util.Log.i("COLUMNS", Arrays.toString(c.getColumnNames())); try { if(c.getCount()>0) { while (c.moveToNext()){ Log.d("SMSss", "Contact : "+c.getString(2)+"\n" +"msg : "+c.getString(11)+"\n" +"ID : "+c.getString(0)+"\n" +"Person : "+c.getString(3)); } } } catch (Exception e) { Log.d("mmmmmmmmm"," "+ e.getStackTrace()); } 

我在清单中使用以下权限

  <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.READ_CALL_LOG"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> 

请告诉我如何获得。 提前致谢。

Solutions Collecting From Web of "我如何使用“content:// sms / inbox”获取SMS发件人联系人(Person)保存的名称"

通过这种方式,您可以从收件箱中获取保存的联系人名称..调用方法getAllSms()获取详细信息..

  public void getAllSms() { Uri message = Uri.parse("content://sms/"); ContentResolver cr = getContentResolver(); Cursor c = cr.query(message, null, null, null, null); startManagingCursor(c); int totalSMS = c.getCount(); if (c.moveToFirst()) { for (int i = 0; i < totalSMS; i++) { Log.d("SMSss", "Contact number : " + c.getString(c .getColumnIndexOrThrow("address")) + "\n" + "msg : " + c.getColumnIndexOrThrow("body") + "\n" + "ID : " + c.getString(c.getColumnIndexOrThrow("_id")) + "\n" + "Person : " + getContactName( getApplicationContext(), c.getString(c .getColumnIndexOrThrow("address")))); c.moveToNext(); } } c.close(); } public String getContactName(Context context, String phoneNumber) { ContentResolver cr = context.getContentResolver(); Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = cr.query(uri, new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null); if (cursor == null) { return null; } String contactName = null; if (cursor.moveToFirst()) { contactName = cursor.getString(cursor .getColumnIndex(PhoneLookup.DISPLAY_NAME)); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } return contactName; } 
 Uri uriInbox = Uri.parse("content://sms/inbox"); Cursor c = getContentResolver().query(uriInbox, null, null, null, null); if (c.moveToFirst()) { for (int i = 0; i < c.getCount(); i++) { String name = null; String phone = ""; String _id = c.getString(c.getColumnIndexOrThrow("_id")); String thread_id = c.getString(c.getColumnIndexOrThrow("thread_id")); String msg = c.getString(c.getColumnIndexOrThrow("body")); String type = c.getString(c.getColumnIndexOrThrow("type")); String timestamp = c.getString(c.getColumnIndexOrThrow("date")); phone = c.getString(c.getColumnIndexOrThrow("address")); name = Function.getContactbyPhoneNumber(getApplicationContext(), c.getString(c.getColumnIndexOrThrow("address"))); c.moveToNext(); } } c.close(); 

最后你的getContactbyPhoneNumber方法:

 public String getContactbyPhoneNumber(Context c, String phoneNumber) { Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] projection = {ContactsContract.PhoneLookup.DISPLAY_NAME}; Cursor cursor = c.getContentResolver().query(uri, projection, null, null, null); if (cursor == null) { return phoneNumber; }else { String name = phoneNumber; try { if (cursor.moveToFirst()) { name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); } } finally { cursor.close(); } return name; } } 

礼貌: http : //www.androstock.com/tutorials/create-sms-app-android-android-studio-part-2.html