android 通话列表

        在android通话列表中,如果单纯的显示出来,会将很多同名通话记录也展示出来。像这种情况我们一般是将同名的通话记录group起来;既确保了速度也美观人性化。

       要实现这个功能很简单,默认的android    Cursor.query方法没有group这个参数;我们只能在原有基础上进行修改。

       如下: cursor = cr.query(CallLog.Calls.CONTENT_URI,
                                   new String[]{CallLog.Calls.NUMBER,CallLog.Calls.CACHED_NAME,CallLog.Calls.TYPE,CallLog.Calls.DATE},
                                   "1=1) group by "+CallLog.Calls.NUMBER+" order by " +CallLog.Calls.DATE+ " DESC"+" -- (",
                                  null,
                                 CallLog.Calls.DATE);

      在这里采用了一个投机取巧的方法,不过功能可以实现。

     具体不多说了,直接粘代码:

     AppCallMessage.java

 

package com.zhuoyue.InternetPhoneNote.activity;


import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.text.format.DateUtils;
import android.text.format.Time;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;


public class AppCallMessage extends Activity {
    /** Called when the activity is first created. */
 
   private ListView listview;
   private static final int INCOMING_TYPE = 1;
   private static final int OUTGOING_TYPE = 2;
   private static final int MISSED_TYPE = 3;
   private static Cursor cursor;
   private static HashMap<String, Object> map;
   private static String number;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_callmessage);
       
        listview = (ListView)findViewById(R.id.list);
       
        SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.list_callmessage_item,
                new String[]{"name","count","number","numfrom","date","imgtype"},
                new int[]{R.id.txt_name,R.id.txt_count,R.id.txt_number,R.id.txt_numfrom,R.id.txt_date,R.id.img_type});
        listview.setAdapter(adapter);
       
       
        listview.setOnItemClickListener(new OnItemClickListener()      
        {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                // TODO Auto-generated method stub
               HashMap<String, Object> temp = (HashMap<String, Object>) listview.getItemAtPosition(arg2);
               number = (String) temp.get("number");
               String name = (String)temp.get("name");
               Log.i("hello", number);
               if( name.equals(null) )
               {
                   name = "No Name";
               }
               Intent intent = new Intent();
               intent.setClass(AppCallMessage.this, callMessageDetail.class);
               intent.putExtra("number", number);
               intent.putExtra("name", name);
               startActivity(intent);

            }

                
         });
       
       
    }
   
   
    private ArrayList<HashMap<String,Object>> getData()
    {

        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();  
        ContentResolver cr = getContentResolver();
        cursor = cr.query(CallLog.Calls.CONTENT_URI,
                          new String[]{CallLog.Calls.NUMBER,CallLog.Calls.CACHED_NAME,CallLog.Calls.TYPE,CallLog.Calls.DATE},
                          "1=1) group by "+CallLog.Calls.NUMBER+" order by " +CallLog.Calls.DATE+ " DESC"+" -- (" ,
                          null,
                          CallLog.Calls.DATE );
       
          for( int i= 0; i<cursor.getCount();i++ )
          {
               cursor.moveToPosition(i);
                map = new HashMap<String, Object>();
           
                if(cursor.getString(cursor.getColumnIndex("name")) == null)
                {
                    map.put("name","No Name" );
                    map.put("number",cursor.getString(cursor.getColumnIndex("number")));
                }
                else
                {
                   
                    map.put("name", cursor.getString(cursor.getColumnIndex("name")));
                    map.put("number",cursor.getString(cursor.getColumnIndex("number")) );
                }
                  
                int type = cursor.getInt(cursor.getColumnIndex("type"));
                map.put("imgtype", setTypeImg(type));
                long date = cursor.getLong(cursor.getColumnIndex("date"));
                map.put("date",formatTimeStampString(AppCallMessage.this, date));
                listItem.add(map);
       
          }
          cursor.close();
       
     
        return listItem;
    }
   
    private int setTypeImg( int type) {
      int str = R.drawable.call_in;
      switch (type) {
        case INCOMING_TYPE:
            str = R.drawable.call_in;
            break;
        case OUTGOING_TYPE:
            str = R.drawable.call_out;
            break;
        case MISSED_TYPE:
            str = R.drawable.call_miss;
            break;
        }
      return str;
    }
   
    private static String formatTimeStampString(Context context, long when) {
        Time then = new Time();
        then.set(when);
        Time now = new Time();
        now.setToNow();

        int format_flags = DateUtils.FORMAT_NO_NOON_MIDNIGHT
                | DateUtils.FORMAT_ABBREV_ALL | DateUtils.FORMAT_CAP_AMPM;
        if (then.year != now.year) {
            format_flags |= DateUtils.FORMAT_SHOW_YEAR
                    | DateUtils.FORMAT_SHOW_DATE;
        } else if (then.yearDay != now.yearDay) {
            format_flags |= DateUtils.FORMAT_SHOW_DATE;
        } else {
            format_flags |= DateUtils.FORMAT_SHOW_TIME;
        }
        return DateUtils.formatDateTime(context, when, format_flags);
    } 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值