Android模拟系统的Calllog,统计打电话时间和发送短信的个数

效果如下:



初学Android,做了这个小软件,界面很丑,凑合看了,功能就是统计一段时间内打电话,接电话,发短信,收短信的信息数,只有一个Activity,TabHost + ListView 很简单,做完了,忘得也差不多了,看能回想起什么不,在这里总结一下。代码位置:http://pan.baidu.com/s/1vNsCS


一. 应当是支持开机启动,这个资料一大堆,不过当时在测试的时候不知道怎么回事在虚拟机上总是开机运行一下就自动退出了,虚拟机内存设置的挺大的,不明白是什么原因,最后在真机上是OK的,也就不管了。真的十分懒

开机启动就是接受系统的BOOT_COMPLETED消息就可以了。

第一步:新建一个类继承自BroadcastReceiver在onReceive里startService或者startActivity就可以了

	public void onReceive(Context context, Intent intent)
	{
		// TODO Auto-generated method stub
		if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
		{
			Intent intent_ = new Intent(context, CallingAndSmsStatisticsService.class);
			context.startService(intent_);
		}
	}

第二步:在AndroidManifest里添加接受消息的类和权限

        <receiver android:name="com.ericdm.callingandsmsstatistics.MyBroadcastReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" >
                </action>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </receiver>
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

二. Tabhost+ListView

每一个Tabhost里面是个ListView,给每个ListView设置不同的Adapter,显示不同的数据,listview是带Checkbox的,以方便长按listview时可以多选删除。不懂设计,代码写的非常乱,法克!

activity_main.xml

    <TabHost
        android:id="@+id/theTabHost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/setDateTime" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >

                <ListView
                    android:id="@+id/listViewAll"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" >
                </ListView>

                <ListView
                    android:id="@+id/listViewOutgoingCalls"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" >
                </ListView>

                <ListView
                    android:id="@+id/listViewIncommingCalls"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" >
                </ListView>

                <ListView
                    android:id="@+id/listViewSendedSMS"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" >
                </ListView>

                <ListView
                    android:id="@+id/listViewReceviedSMS"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1" >
                </ListView>
            </FrameLayout>
        </LinearLayout>
    </TabHost>

ListView中的控件:listview_checkbox.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:padding="5dp"
    android:textColor="#000" >
    <TextView
        android:id="@+id/listViewTextContent"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:gravity="center_vertical"
        android:textSize="17sp"
        android:textColor="@android:color/holo_blue_dark"/>
    <TextView
        android:id="@+id/listViewTextContent_time"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:gravity="center_vertical"
        android:textSize="17sp"
        android:textColor="@android:color/holo_purple"/>
    <CheckBox
        android:id="@+id/item_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center_vertical" />
</LinearLayout>

对于Listview就是给它设置Adapter了,每个listview都是大同小异,主要是得到相应的数据。

public class ListViewAdapterIncommingCall extends BaseAdapter{
	private ArrayList<String> list;
	private ArrayList<String> callTimeList;
	private Context context;
	private LayoutInflater layoutInflater = null;
	public static HashMap<Integer, Boolean> isSelected;
	public static Boolean isShowCheckBox = false;
	
	@SuppressLint("UseSparseArrays") 
	public ListViewAdapterIncommingCall(ArrayList<String> list, ArrayList<String> callTimeList, Context context){
		this.context = context;
		this.list = list;
		this.callTimeList = callTimeList;
		layoutInflater = LayoutInflater.from(context);//使用layoutInflater可以在Activity里动态载入指定的xml文件,使其显示xml中定义的控件。 
		isSelected = new HashMap<Integer, Boolean>();//记录Checkbox是否被选中。
		deselectAllItems();
	}
	public ArrayList<String> getSelectItems(){//得到在Listview中多选选中的电话号码。
		ArrayList<String> selectedPhoneNumber = new ArrayList<String>();
		for (int i = 0; i < list.size(); i++) {
			if (getIsSelected().get(i)) {
				selectedPhoneNumber.add(list.get(i));
			}
		}
		return selectedPhoneNumber;
	}
	public void deselectAllItems() {//多选时全不不选中。
		for (int i = 0; i < list.size(); i++) {
			getIsSelected().put(i, false);
		}
	}
	public void inverseSelectItems(){//多选时反选。
		for (int i = 0; i < list.size(); i++) {
			if (getIsSelected().get(i)) {
				getIsSelected().put(i, false);
			}else {
				getIsSelected().put(i, true);
			}
		}
	}
	public void selectAllItems() {//多选时全选
		for (int i = 0; i < list.size(); i++) {
			getIsSelected().put(i, true);
		}
	}
	public static HashMap<Integer, Boolean> getIsSelected() {
		return isSelected;
	}
	public static boolean isItemSelected(int position){
		return isSelected.get(position);
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}
	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}
	@SuppressWarnings("unused")
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder viewHolder;//ViewHolder缓存从 getView中得到的xml中定义的控件,这样不用每次从XML中去取,提高效率。
		if (convertView  == null) {
			viewHolder = new ViewHolder();
			convertView = layoutInflater.inflate(R.layout.listview_checkbox, null);
			viewHolder.tv = (TextView) convertView.findViewById(R.id.listViewTextContent);
			viewHolder.tv_time = (TextView) convertView.findViewById(R.id.listViewTextContent_time);
			viewHolder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		if (isShowCheckBox) {
			viewHolder.cb.setVisibility(View.VISIBLE);
		} else {
			viewHolder.cb.setVisibility(View.INVISIBLE);
		}
		viewHolder.tv.setText((CharSequence) list.get(position));
		viewHolder.tv_time.setText((CharSequence) callTimeList.get(position));
		viewHolder.cb.setChecked((Boolean) getIsSelected().get(position));
		return convertView;
	}

	public static class ViewHolder {
		public TextView tv;
		public TextView tv_time;
		public CheckBox cb;
	}
}

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值