Как получить имя сохраненного SMS-отправителя (Person) с помощью "content://sms/inbox" - программирование

Как получить имя сохраненного SMS-отправителя (Person) с помощью "content://sms/inbox"

В моем приложении я хочу получить отправителя SMS, сохраненного Name, используя код ниже, но всегда возвращает 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());
            }

Я использую следующее разрешение в манифесте

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

Пожалуйста, предложите мне, как добраться. Спасибо заранее.

4b9b3361

Ответ 1

Таким образом вы можете получить сохраненное имя контакта из папки "Входящие".  вызовите метод 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;
}

Ответ 2

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