Сколько столбцов базы данных связано с SMS в Android?

Я хочу читать все сообщения и их соответствующие детали с моего телефона. Для этого я использую Uri следующим образом:

Uri sms = Uri.parse("content://sms/");

Но я не знаю, сколько столбцов в базе данных связано с этим uri.

Я хочу отобразить следующую информацию:

  1. Тип сообщения
  2. Номер отправителя
  3. Тело сообщения
  4. Отметка времени

Пожалуйста, может ли кто-нибудь перечислить общее количество имен столбцов?


person Vikas Patidar    schedule 26.10.2010    source источник


Ответы (6)


пакет com.readsms;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class ReadSMS extends Activity 
{
    private static final String tag = "Whozzat";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Uri sms = Uri.parse("content://sms/inbox");
        ContentResolver cr = this.getContentResolver();
        Cursor c = cr.query(sms, null, null, null, null);
        for (int i = 0; i < c.getColumnCount(); i++)
        {
            Log.v(tag, c.getColumnName(i).toString());
        }
        c.close();
    }
}

после запуска этого фрагмента кода у меня есть следующие столбцы:

альтернативный текст

person Vikas Patidar    schedule 26.10.2010

Вы должны иметь возможность вращать курсор и искать себя:

mCursor = managedQuery(sms, null, null, null, null);

StringBuffer info = new StringBuffer();
for( int i = 0; i < mCursor.getColumnCount(); i++) {
    info.append("Column: " + mCursor.getColumnName(i) + "\n");
}
Toast.makeText(getApplicationContext(), info.toString(), Toast.LENGTH_LONG).show();
person Dennis Winter    schedule 26.10.2010
comment
я трачу много времени, используя отладчик, чтобы выяснить поля. Это очень полезно :) - person rockstar; 29.03.2013

content://sms не является частью официального Android API, поэтому использовать его не рекомендуется. Он может перестать работать, а некоторые телефоны, использующие собственные реализации для SMS (например, HTC Sense?), могут иметь собственного поставщика контента, который не будет работать с вашим кодом.

Тем не менее, если вы действительно хотите покопаться в этом, вы можете посмотреть исходный код для него.

Но опять же, обратите внимание на это предупреждение: http://android-developers.blogspot.com/2010/05/be-careful-with-content-providers.html.

person EboMike    schedule 26.10.2010
comment
каким должен быть предпочтительный способ доступа к хранилищу SMS? Должны ли мы вручную создавать списки разговоров? - person Dennis Winter; 26.10.2010

Просто попробуйте это:

public void showAllCNames (View v){
        Uri uri = Uri.parse("content://sms/");
        final Cursor cur = getContentResolver().query(uri, null, null, null, null);
        for (String s : cur.getColumnNames()){Log.d("COLUMN_NAME", s);}
}

Я пробежался по имени столбца и получил его:

COLUMN_NAME: _id

COLUMN_NAME: thread_id

COLUMN_NAME: адрес

COLUMN_NAME: человек

COLUMN_NAME: дата

COLUMN_NAME: date_sent

COLUMN_NAME: sc_timestamp

COLUMN_NAME: протокол

COLUMN_NAME: прочитано

COLUMN_NAME: статус

COLUMN_NAME: введите

COLUMN_NAME: answer_path_present

COLUMN_NAME: тема

COLUMN_NAME: тело

COLUMN_NAME: сервис_центр

COLUMN_NAME: заблокировано

COLUMN_NAME: sub_id

COLUMN_NAME: код_ошибки

COLUMN_NAME: просмотрено

COLUMN_NAME: lgeMsgType

COLUMN_NAME: lgeSiid

COLUMN_NAME: lgeCreated

COLUMN_NAME: lgeExpires

COLUMN_NAME: lgeReceived

COLUMN_NAME: lgeAction

COLUMN_NAME: lgeSec

COLUMN_NAME: lgeMac

COLUMN_NAME: lgeDoc

COLUMN_NAME: doInstalled

COLUMN_NAME: lgePinRemainCnt

COLUMN_NAME: index_on_icc

COLUMN_NAME: service_msg_sender_address

COLUMN_NAME: lgeCallbackNumber

COLUMN_NAME: sms_imsi_data

person Shwarz Andrei    schedule 14.06.2016

Если вы просто хотите узнать, что хранится в конкретном курсоре, вы можете просто использовать DatabaseUtils.dumpCursor(cursor); для отображения всех столбцов со значениями на вашей консоли.

person Lau    schedule 11.07.2017

Телефон Android 4.4.2. Поскольку это зависит от версии/контента, не полагайтесь на цифровой индексный ключ.

_id thread_id адрес m_size человек дата date_sent протокол прочитано тип статуса response_path_present тема тело service_center заблокировано sim_id error_code замечено ipmsg_id

person kalabog76    schedule 20.09.2014