1

我也想访问短信日志。但我没有找到任何方法,我已经使用 CallLog.Calls 访问了通话记录,它无法列出短信记录。下面的代码仅列出通话日志,但并非所有日志甚至短信日志都没有列出(短信日志表示由于接收和发送短信而创建的日志)。请帮我找到找回短信日志的方法。如果可能的话,请先生。

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

这只是建议。你得到更好的答案,而不是这个......

看看你是否想要获取短信日志然后使用下面的代码..你已经得到了通话记录..所以如果你想在一个列表中混合通话和短信登录,那么你必须按日期这样做..

在通话记录中,您会在短信中获得日期和时间,您还会获得日期和时间

短信记录代码...

把它放在方法中并使用你自己的方式..

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();

................................................. 一世在数组列表中添加了所有短信详细信息

     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 回答