Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android vesion-4.0.4中,呼叫日志与短信日志位于同一位置_Java_Android - Fatal编程技术网

Java 在android vesion-4.0.4中,呼叫日志与短信日志位于同一位置

Java 在android vesion-4.0.4中,呼叫日志与短信日志位于同一位置,java,android,Java,Android,我正在创建一个应用程序,它以这种方式读取调用日志: Uri uriCallsURI = Uri.parse("content://call_log/calls"); Cursor cur = mainActivity.getContentResolver().query(uriCallsURI, null, null, null, "_id"); 安卓2.3.6的一切都在运行,但安卓4.0.4也将短信显示为通话记录。 如何防止这种情况发生?不要硬编码字符串。尝试编写如下代码: Cursor

我正在创建一个应用程序,它以这种方式读取调用日志:

 Uri uriCallsURI = Uri.parse("content://call_log/calls");
 Cursor cur = mainActivity.getContentResolver().query(uriCallsURI, null, null, null, "_id");
安卓2.3.6的一切都在运行,但安卓4.0.4也将短信显示为通话记录。
如何防止这种情况发生?

不要硬编码字符串。尝试编写如下代码:

Cursor cur = null;
        try {
            cur = getContentResolver().query(CallLog.Calls.CONTENT_URI,
                    new String[] { BaseColumns._ID, CallLog.Calls.NUMBER },
                    null, null, "_id");

            if (cur != null && cur.moveToFirst()) {
                do {
                    Log.i("call", "id = " + cur.getString(0));
                    Log.i("call", "number = " + cur.getString(1));
                    Log.i("call", "..................................");
                } while (cur.moveToNext());
            }
        } finally {
            if (cur != null) {
                cur.close();
            }
        }

尤舒克斯,问题出在别处。三星在通话记录中有列日志类型。我终于找到了答案

我已经修改了你的代码,现在我只能在三星安卓4.0.4手机上获得通话记录

Cursor cur = null;
try {

    cur = getContentResolver().query(CallLog.Calls.CONTENT_URI,
            new String[] { BaseColumns._ID, CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME, 
            CallLog.Calls.DURATION, CallLog.Calls.DATE, CallLog.Calls.TYPE,  CallLog.Calls.NEW},
            "logtype=100 OR logtype=500", null, "_id");

    displayLogs(cur);

} catch(SQLiteException e){

    cur = getContentResolver().query(CallLog.Calls.CONTENT_URI,
            new String[] { BaseColumns._ID, CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME, 
            CallLog.Calls.DURATION, CallLog.Calls.DATE, CallLog.Calls.TYPE,  CallLog.Calls.NEW},
            null, null, "_id");

     displayLogs(cur);

} finally {
    if (cur != null) {
        cur.close();
    }
}

可能某些定义或API发生了变化。我已经在下面写了我的答案,你可以试试。