android中与SMS关联的数据库列数量是多少?

Vik*_*dar 23 sms android messages

我想通过手机阅读所有信息及其各自的详细信息.为此,我使用这样的Uri:

Uri sms = Uri.parse("content://sms/");
Run Code Online (Sandbox Code Playgroud)

但我不知道数据库中有多少列与此uri相关联.

我想显示以下信息:

  1. 消息类型
  2. 发件人编号
  3. 邮件正文
  4. 时间戳

任何人都可以列举总列名吗?

Vik*_*dar 50

package 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码段后,我有以下列:

替代文字


Den*_*ter 25

您应该能够通过光标旋转并查找自己:

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();
Run Code Online (Sandbox Code Playgroud)


Ebo*_*ike 6

content://sms不是官方Android API的一部分,因此使用它不是一个好主意.它可能会停止工作,一些使用自己的SMS实现的手机(HTC Sense,也许?)可能有自己的内容提供商,不能使用你的代码.

也就是说,如果你真的想深入研究它,你可以查看它的源代码.

但同样,请注意这个警告:http://android-developers.blogspot.com/2010/05/be-careful-with-content-providers.html.

  • 什么应该是访问SMS商店的首选方式?我们应该手动创建对话列表吗? (2认同)

Shw*_*rei 5

试试这个:

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);}
}
Run Code Online (Sandbox Code Playgroud)

我浏览了列名并得到了它:

COLUMN_NAME:_id

COLUMN_NAME:thread_id

COLUMN_NAME:地址

COLUMN_NAME:人

COLUMN_NAME:日期

COLUMN_NAME:发送日期

COLUMN_NAME:sc_timestamp

COLUMN_NAME:协议

COLUMN_NAME:已读

COLUMN_NAME:状态

COLUMN_NAME:类型

COLUMN_NAME:reply_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:lge已创建

COLUMN_NAME:lgeExpires

COLUMN_NAME:lge已接收

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