web-dev-qa-db-ja.com

AndroidのSMS)に関連付けられているデータベース列はいくつありますか?

私の電話からすべてのメッセージとそれぞれの詳細を読みたいです。このために私はこのようにウリを使用しています:

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

しかし、このURIに関連付けられているデータベース内の列の数はわかりません。

次の情報を表示したい:

  1. メッセージタイプ
  2. 送信者番号
  3. メッセージ本文
  4. タイムスタンプ

誰かが列名の総数を列挙できますか?

23
Vikas Patidar

パッケージ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

51
Vikas Patidar

カーソルを回転して自分自身を探すことができるはずです。

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();
25
Dennis Winter

content://smsは公式のAndroid APIの一部ではないため、使用することはお勧めできません。動作しなくなる可能性があり、SMS(HTC Sense、多分?)に独自の実装を使用する一部の電話には、コードで動作しない独自のコンテンツプロバイダーがある場合があります。

そうは言っても、本当に掘り下げたいのであれば、 ソースコード を見ることができます。

ただし、この警告にも注意してください: http://Android-developers.blogspot.com/2010/05/be-careful-with-content-providers.html

6
EboMike

これを試してみてください:

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

3
Shwarz Andrei

特定のカーソルに何が格納されているかを知りたいだけの場合は、DatabaseUtils.dumpCursor(cursor);を使用して、コンソールに値を含むすべての列を表示できます。

0
Lau