Сколько столбцов базы данных связано с SMS в Android?
Я хочу прочитать все сообщения и их соответствующие данные с моего телефона.
Для этого я использую Uri следующим образом:
Uri sms = Uri.parse("content://sms/");
Но я не знаю, сколько столбцов в базе данных связано с этим uri.
Я хочу отобразить следующую информацию:
- Тип сообщения
- Номер отправителя
- Тело сообщения
- Отметка
Пожалуйста, кто-нибудь может перечислить общие имена столбцов?
Ответы
Ответ 1
пакет 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();
}
}
после запуска этого фрагмента кода у меня есть следующие столбцы:
![alt text]()
Ответ 2
Вы должны иметь возможность поворачивать курсор и искать себя:
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();
Ответ 3
content://sms
не входит в официальный Android API, и поэтому не рекомендуется использовать его. Он может перестать работать, а некоторые телефоны, которые используют свои собственные реализации для SMS (HTC Sense, может быть?), Могут иметь собственный поставщик контента, который не будет работать с вашим кодом.
Тем не менее, если вы действительно хотите в него вникать, вы можете посмотреть на исходный код для него.
Но опять же, прислушайтесь к этому предупреждению: http://android-developers.blogspot.com/2010/05/be-careful-with-content-providers.html.
Ответ 4
Просто попробуйте следующее:
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: reply_path_present
COLUMN_NAME: тема
COLUMN_NAME: тело
COLUMN_NAME: service_center
COLUMN_NAME: заблокировано
COLUMN_NAME: sub_id
COLUMN_NAME: error_code
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_datap >
Ответ 5
Если вы просто хотите знать, что хранится в определенном курсоре, вы можете просто использовать DatabaseUtils.dumpCursor(cursor);
для отображения всех столбцов со значениями на консоли
Ответ 6
Вот оно: https://developer.android.com/reference/android/provider/Telephony.TextBasedSmsColumns
с объяснениями
Ответ 7
Android 4.4.2 телефон
Поскольку это специфическая версия/контент, не полагайтесь на числовой индексный ключ
_id
thread_id
адрес
m_size
человек
Дата
Дата отправки
протокол
читать
положение дел
тип
reply_path_present
предмет
тело
сервисный центр
запертый
SIM-идентификатор
код ошибки
видели
ipmsg_id