1

SMS ログにもアクセスしたい。しかし、方法が見つかりません.CallLog.Callsを使用して通話ログにアクセスしましたが、SMSログを一覧表示できません. 以下のコードは通話ログのみをリストしていますが、sms ログもリストされていないすべてのログではありません (sms ログとは、sms を送受信したために作成されたログを意味します)。SMS ログを取得する方法を教えてください。よろしければ回答お願いします。

Cursor cursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null,
            null, Calls.DATE + " DESC");
    // cursor is inited
    cursor.moveToFirst();

    String name;
    String number;
    int type;
    do {

        name = "";
        number = "";
        type = -1;
        try {
            number = cursor.getString(cursor
                    .getColumnIndex(CallLog.Calls.NUMBER));
            type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));
            try {
                name = cursor.getString(cursor
                        .getColumnIndex(CallLog.Calls.CACHED_NAME));

            } catch (Exception e) {
            } finally {
                if (name == null || name.equals("")) {
                    name = "UNKNOWN";
                }
            }
            Log.e("My App", name + " : "+number + " : "+type);
        } catch (Exception e) {
            Log.e("My App", "Error in creation");
        }
    } while (cursor.moveToNext());
4

3 に答える 3

2

これは単なる提案です。これよりも良い答えが得られます...

SMSログを取得したい場合は、以下のコードを使用してください..そして、すでに通話ログを取得しています..したがって、通話とSMSログを1つのリストに混在させたい場合は、日付でそれを行う必要があります..

通話履歴では、SMSで日付と時刻を取得し、日付と時刻も取得します

SMS ログ コード...

これをメソッドに入れて、独自の方法を使用してください..

CharSequence contentTitle = getString(R.string.app_name);
            final ProgressDialog progDailog = ProgressDialog.show(
                    All_logs_tab.this, contentTitle, "Please wait...", true);
            final Handler handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                      /* finish sms load */
                }
            };

            new Thread() {
                public void run() {
                    try {

                        Uri myMessage = Uri.parse("content://sms/");
                        ContentResolver cr = con.getContentResolver();
                        Cursor c = cr.query(myMessage, new String[] { "_id",
                                "address", "date", "body", "read" }, null,
                                null, null);

                        startManagingCursor(c);
                        getSmsLogs(c, con);

                    } catch (Exception e) {
                    }
                    handler.sendEmptyMessage(0);
                    progDailog.dismiss();
                }
            }.start();

................................................. 私配列リストにすべての SMS の詳細を追加しました

     ArrayList<String> sms_id = new ArrayList<String>();
     ArrayList<String> sms_num = new ArrayList<String>();
     ArrayList<String> sms_Name = new ArrayList<String>();
     ArrayList<String> sms_dt = new ArrayList<String>();
     ArrayList<String> sms_body = new ArrayList<String>();

................................................................... ……

public void getSmsLogs(Cursor c, Context con) {

        if (sms_num.size() > 0) {
            sms_id.clear();
            sms_num.clear();
            sms_Name.clear();
            sms_body.clear();
            sms_dt.clear();
        }

        try {

            if (c.moveToFirst()) {
                do {



                    if (c.getString(c.getColumnIndexOrThrow("address")) == null) {
                        c.moveToNext();
                        continue;
                    }

                    String _id = c.getString(c.getColumnIndexOrThrow("_id"))
                            .toString();

                    String Number = c.getString(
                            c.getColumnIndexOrThrow("address")).toString();
                    String dat = c.getString(c.getColumnIndexOrThrow("date"))
                            .toString();

                    String as = (String) get_dt(dat, "dd/MM/yyyy, hh.mma");
                    String Body = c.getString(c.getColumnIndexOrThrow("body"))
                            .toString();
                    String name = getContactDisplayNameByNumber("" + Number,
                            con);

                    if (name.length() <= 0 || name.length() == 1) {
                        name = "no name";
                    }
                    sms_id.add(_id);
                    sms_num.add(Number);
                    sms_Name.add("" + name);
                    sms_body.add(Body);
                    sms_dt.add(as);

                } while (c.moveToNext());
            }
            c.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
于 2012-07-06T05:38:17.243 に答える
0

SMSメッセージのテーブルへのURIが必要です。これにより、データが取得されます。ただし、これは基本ソースコードにあります。これを行うことはGoogleによって推奨されていません。

于 2012-07-06T05:04:09.397 に答える
0

このリンクAndroid 通話ログを使用して、通話ログを取得します。SMS の場合はSMS_URI ="content://sms"を使用して同じことを行いますが、パブリック URi ではないためお勧めしません。

于 2012-07-06T05:27:57.330 に答える