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发生了变化。我已经在下面写了我的答案,你可以试试。