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

标签 android sms

在我的应用程序中,我想使用以下代码检索 SMS 发件人保存的名称,但它始终返回 null。请建议我获取发件人姓名的便捷方法是什么。

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

我在 list 中使用以下权限

 <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"/>

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

最佳答案

通过这种方式,您可以从收件箱中获取保存的联系人姓名.. 调用方法 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;
}

关于android - 我如何使用 "content://sms/inbox"获取 SMS 发件人联系人(人)保存的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765795/

相关文章:

sql-server - 通过 SQL Server 2008 发送 SMS

java - Android ActionBar 谷歌教程

java - 为什么 ArrayList<>.add() 不起作用?

android - 委派经理是一个好的设计理念吗?

android - 从 AsyncTask 检索对象值

android - 如何在 Android Jetpack Compose 中向 Card 对象添加图像背景?

php - 如何发送 session 已经开始的 Twilio SMS?

android - 收听传入的多部分 SMS 消息

sms - 内容 ://sms/inbox query

java - 如何在 Okta Java SDK 中发送短信质询