【发布时间】:2011-04-30 15:24:17
【问题描述】:
我想从我的手机中读取所有消息及其各自的详细信息。 为此,我使用这样的 Uri:
Uri sms = Uri.parse("content://sms/");
但我不知道数据库中有多少列与此 uri 相关联。
我想显示以下信息:
- 消息类型
- 发件人号码
- 消息正文
- 时间戳
请问有人能列举出总的列名吗?
【问题讨论】:
我想从我的手机中读取所有消息及其各自的详细信息。 为此,我使用这样的 Uri:
Uri sms = Uri.parse("content://sms/");
但我不知道数据库中有多少列与此 uri 相关联。
我想显示以下信息:
请问有人能列举出总的列名吗?
【问题讨论】:
包 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();
}
}
运行此代码 sn-p 后,我得到了以下列:
【讨论】:
您应该能够通过光标旋转并寻找自己:
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();
【讨论】:
content://sms 不是官方 Android API 的一部分,因此使用它不是一个好主意。它可能会停止工作,并且一些使用自己的 SMS 实现的手机(可能是 HTC Sense?)可能有自己的内容提供商,无法使用您的代码。
也就是说,如果你真的想深入了解它,你可以查看source code。
但同样,请注意这个警告:http://android-developers.blogspot.com/2010/05/be-careful-with-content-providers.html。
【讨论】:
试试这个:
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:日期发送
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:lgeCreated
COLUMN_NAME:lgeExpires
COLUMN_NAME:lgeReceived
COLUMN_NAME:lgeAction
COLUMN_NAME:lgeSec
COLUMN_NAME:lgeMac
COLUMN_NAME:lgeDoc
COLUMN_NAME:已安装
COLUMN_NAME:lgePinRemainCnt
COLUMN_NAME:index_on_icc
COLUMN_NAME:service_msg_sender_address
COLUMN_NAME:lgeCallbackNumber
COLUMN_NAME:sms_imsi_data
【讨论】:
如果您只想知道特定光标中存储的内容,您可以简单地使用DatabaseUtils.dumpCursor(cursor); 在控制台上显示所有带有值的列
【讨论】:
Android 4.4.2 手机 由于这是特定于版本/内容的,因此不要依赖数字索引键
_id 线程 ID 地址 m_size 人 日期 发送日期 协议 读 状态 类型 reply_path_present 主题 身体 服务中心 锁定 sim_id 错误代码 见过 ipmsg_id
【讨论】: