我想检索通话记录并在 ListView 中显示。这是在第二个 Activity 中完成的(不是在主要 Activity 中)。但它不工作。当我使用 CommonDataKinds.Phone.CONTENT_URI 而不是 android.provider.CallLog.Calls.CONTENT_URI 时,我可以检索联系人数据。我已经设置权限 请帮忙解决。我是 Android 新手。
公共(public)类 CallLogActivity 扩展 Activity {
private ListView callLogListView;
private ArrayList<String> callLogStringArray = new ArrayList<String>();
private ArrayAdapter<String> callLogAdapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call_log);
callLogStringArray.add("fdfdfd");
callLogListView = (ListView)findViewById(R.id.call_log_list);
callLogAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, callLogStringArray);
callLogListView.setAdapter(callLogAdapter);
updateCallLog();
}
private void updateCallLog (){
Cursor c = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, null, null, null, null);
int numberColumn = c.getColumnIndex(android.provider.CallLog.Calls.NUMBER);
if(c.moveToFirst()){
do {
callLogStringArray.add(c.getString(numberColumn));
} while (c.moveToNext());
}
callLogAdapter.notifyDataSetChanged();
}
最佳答案
首先,您定义要获取的所有字段。 如下:
String[] strFields = {
android.provider.CallLog.Calls.NUMBER,
android.provider.CallLog.Calls.TYPE,
android.provider.CallLog.Calls.CACHED_NAME,
android.provider.CallLog.Calls.CACHED_NUMBER_TYPE
};
然后你定义一个订单:
String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
最后你得到了ContentResolver
Cursor mCallCursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI,
strFields,
null,
null,
strOrder
);
下一步是为您的列表编写一个 CursorAdapter 类。
这是一个很棒的教程:Link
顺便说一句: Call Log Content Provider 可以提供以下字段:
- CACHED_NAME:调用者的名字
- CACHED_NUMBER_TYPE:号码类型,例如移动、工作、家庭等。
- DATE:自“纪元”(1970 年 1 月 1 日)以来的调用日期(以毫秒为单位)
- DURATION:通话时长(以秒为单位)
- NUMBER:电话号码
- TYPE:调用类型,例如传入、传出等
关于android - 如何检索android通话记录数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24685468/