学习CallLog的访问整理代码如下:
UltraCallLogActivity.java
package huh.test.UltraCallLog;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Random;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class UltraCallLogActivity extends Activity {
private ListView mCallLogList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mCallLogList = (ListView) findViewById(R.id.listView);
mCallLogList.setOnCreateContextMenuListener(this);
OnItemClickListener listener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
String string = new String("You clicked the listView!");
string = string + "\nPosittion: " + arg2;
string = string + "\nId: " + arg3;
string = string + "\nObject: "
+ mCallLogList.getItemAtPosition(arg2).toString();
DisplayToast(string);
}
};
mCallLogList.setOnItemClickListener(listener);
InsertCallLog();
// ClearCallLog();
// DisplayCallLog();
DeleteCallLogByNumber(new String[] { "44444" });
CallLogListSetAdapte();
}
public void DisplayCallLog() {
String[] projection = new String[] { CallLog.Calls.NUMBER,
CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE,
CallLog.Calls.DATE };
Cursor c = GetCallLog(projection);
DisplayCursor(c);
c.close();
}
public void CallLogListSetAdapte() {
String[] column = new String[] { CallLog.Calls.NUMBER
// ,
};
int[] views = new int[] { android.R.id.text1
// , android.R.id.text1
};
Cursor c = GetCallLog(null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, c, column, views);
mCallLogList.setAdapter(adapter);
}
public Cursor GetCallLog(String[] projection) {
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI, projection, null,
null, CallLog.Calls.DEFAULT_SORT_ORDER);
return cursor;
}
// 删除某联系人最近的一次来电
public void DeleteCallLogByNumber(String[] number) {
ContentResolver resolver = getContentResolver();
// 这里涉及到内容提供者的知识,其实这里是直接在操作 Android 的数据库
Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI,
new String[] { "_id" }, "number=?", number, "_id desc limit 1");
if (cursor.moveToFirst()) {
int id = cursor.getInt(0);
resolver.delete(CallLog.Calls.CONTENT_URI, "_id=?",
new String[] { id + "" });
}
}
// Clear CallLog
public void ClearCallLog() {
ContentResolver resolver = getContentResolver();
resolver.delete(CallLog.Calls.CONTENT_URI, null, null);
}
public void InsertCallLog() {
Cursor cursor = GetCallLog(null);
if (cursor.getCount() > 30) {
return;
}
ContentValues values = new ContentValues();
for (int i = 0; i < 10; i++) {
Random random = new Random();
values.put(CallLog.Calls.NUMBER, "13621354" + random.nextInt(1000));
// values.put(CallLog.Calls.CACHED_NAME, "Jack" + i);
values.put(CallLog.Calls.DATE, System.currentTimeMillis());
values.put(CallLog.Calls.TYPE, CallLog.Calls.MISSED_TYPE);// 未接
values.put(CallLog.Calls.NEW, "1");// 0已看1未看
InsertCallLogByContentValues(values);
}
}
public void InsertCallLogByContentValues(ContentValues values) {
ContentResolver cr = getContentResolver();
cr.insert(CallLog.CONTENT_URI, values);
}
public void DisplayCursor(Cursor cursor) {
while (cursor.moveToNext()) {
String str = "Number:\t\t\t" + cursor.getString(0);
str = str + "\nName:\t\t\t" + cursor.getString(1);
str = str + "\nType:\t\t\t" + cursor.getInt(2);
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date(Long.parseLong(cursor.getString(3)));
str = str + "\nDate:\t\t\t" + sfd.format(date);
DisplayToast(str);
}
}
public void DisplayToast(String s) {
Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
}
// /////////////////////////Menu Process////////////////////////////////
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, view, menuInfo);
CreateMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return MenuChoice(item);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
return MenuChoice(item);
}
private void CreateMenu(Menu menu) {
MenuItem mnu1 = menu.add(0, 0, 0, "Clear All");
{
mnu1.setAlphabeticShortcut('a');
mnu1.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu2 = menu.add(0, 1, 1, "Edit");
{
mnu2.setAlphabeticShortcut('b');
mnu2.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu3 = menu.add(0, 2, 2, "Delete");
{
mnu3.setAlphabeticShortcut('c');
mnu3.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu4 = menu.add(0, 3, 3, "Insert");
{
mnu4.setAlphabeticShortcut('d');
mnu4.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu5 = menu.add(0, 4, 4, "About");
{
mnu5.setAlphabeticShortcut('e');
mnu5.setIcon(R.drawable.ic_launcher);
}
}
private boolean MenuChoice(MenuItem item) {
switch (item.getItemId()) {
case 0:
ClearCallLog();
return true;
case 1:
Toast.makeText(this, "You clicked on Item 2", Toast.LENGTH_LONG)
.show();
return true;
case 2:
Toast.makeText(this, "You clicked on Item 3", Toast.LENGTH_LONG)
.show();
return true;
case 3:
InsertCallLog();
CallLogListSetAdapte();
return true;
case 4:
Toast.makeText(this, "You clicked on Item 5", Toast.LENGTH_LONG)
.show();
return true;
case 5:
Toast.makeText(this, "You clicked on Item 6", Toast.LENGTH_LONG)
.show();
return true;
case 6:
Toast.makeText(this, "You clicked on Item 7", Toast.LENGTH_LONG)
.show();
return true;
}
return false;
}
}
main.xml
View Code
<?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="vertical" >
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:stackFromBottom="false"
android:transcriptMode="normal" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:stackFromBottom="false"
android:transcriptMode="normal" />
</LinearLayout>