私の電話からすべてのメッセージとそれぞれの詳細を読みたいです。このために私はこのようにウリを使用しています:
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();
}
}
このコードスニペットを実行した後、次の列があります。
カーソルを回転して自分自身を探すことができるはずです。
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、多分?)に独自の実装を使用する一部の電話には、コードで動作しない独自のコンテンツプロバイダーがある場合があります。
そうは言っても、本当に掘り下げたいのであれば、 ソースコード を見ることができます。
ただし、この警告にも注意してください: 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: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_data
特定のカーソルに何が格納されているかを知りたいだけの場合は、DatabaseUtils.dumpCursor(cursor);
を使用して、コンソールに値を含むすべての列を表示できます。