16读取通话记录

  • 所需权限

    <!-- 获取拨打电话的记录权限 -->
        <uses-permission android:name="android.permission.READ_CALL_LOG"/>
  • layout 布局文件
    mainActivity

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
          />
    
        <TextView 
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="暂无数据"
            android:layout_centerInParent="true"
            android:textColor="#f00"
            android:textSize="30sp"
            />
    
    </RelativeLayout>
    

list填充文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:id="@+id/tv_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView 
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />


</LinearLayout>
  • 逻辑代码 mainActivity.java

    package com.qf.day16_contentresolver_call_demo2;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.logging.SimpleFormatter;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.CallLog;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.view.Menu;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    
    /**
     * 
     * 通话记录的数据
     * 
     * 1,获取ContentResolver对象 2,ContentResolver对象 通过Uri地址 获取数据 3,展示数据
     * 
     */
    public class MainActivity extends Activity {
    
        private ListView lv;
        private TextView tv;
    
        private ContentResolver contentResolver;
        //content://call_log/calls
        private Uri callUri = CallLog.Calls.CONTENT_URI;
    
        private String [] coumns = new String[]{CallLog.Calls._ID,CallLog.Calls.NUMBER,CallLog.Calls.DATE};
    
    
        //存数据源的集合
        private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
    
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            lv = (ListView) findViewById(R.id.lv);
            tv = (TextView) findViewById(R.id.tv);
    
            contentResolver = getContentResolver();
    
            //解析器 通过Uri地址获取指定的字段项
            Cursor cursor = contentResolver.query(callUri, 
                    coumns, 
                    null, 
                    null,
                    null);
    
            while(cursor.moveToNext()){
                Map<String, Object> map = new HashMap<String, Object>();
                long id = cursor.getLong(cursor.getColumnIndex(CallLog.Calls._ID));
                String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
                long date = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
    
    
                map.put("id", id);
                map.put("number", number);
                map.put("date", format.format(date));
    
                list.add(map);
    
            }
    
    
            SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,
                    list, R.layout.item, new String[]{"number","date"}, new int[]{R.id.tv_number,R.id.tv_date});
    
            lv.setAdapter(adapter);
            //如果没有数据  展示VIew
            lv.setEmptyView(tv);
    
        }
    
    }
    

posted on 2016-09-12 19:20  木鱼哥  阅读(197)  评论(0编辑  收藏  举报

导航