您的位置:首页 > 移动开发 > Android开发

Android实战--实现读取通讯录和拨打电话功能

2014-04-07 19:55 627 查看
ContentProvider可以用来将自己的数据库发布给其他的程序调用。

对于咱们普通的开发人员来说,ContentProvider没有作用,因为没有必要将自己程序的数据库公开给别人使用。

咱们主要用到的是ContentResolver,这个类是用来调用别人发布好的数据库服务的。

当某个程序发布ContentProvider时,会同时发布一个唯一标识,其他程序就根据这个唯一的标识来调用这个数据库操作。

系统程序中提供了多个这种唯一值,分别用来调用系统数据库中对应的数据库操作,主要包含:

1) Contracts:联系人方式

2) CallLog:通话记录

3) Phone:联系电话

4) Audio:所有音频文件信息

5) Video:所有视频文件信息

这里先使用ContentResolver读取手机通讯录中的所有联系人以及电话信息

实现的Activity类:

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.ContactsContract.CommonDataKinds.Phone;

import android.provider.ContactsContract.Contacts;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import com.example.callphone.utils.Globals;

public class MainActivity extends Activity {

private ListView list;

private ArrayAdapter<String> adapter;

private List<String> allValues = new ArrayList<String>();

private List<String> allPhoneNums = new ArrayList<String>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Globals.init(this);

//设置所使用的布局界面

setContentView(R.layout.page_01);

list = (ListView) findViewById(R.id.list);

//准备数据

Cursor c = getContentResolver().query(Contacts.CONTENT_URI,

null, null, null, null);

//循环将数据加入到集合里

c.moveToFirst();

while(!c.isAfterLast()){

StringBuilder builder = new StringBuilder();

//取得联系人的姓名

String name = c.getString(c.getColumnIndex(Contacts.DISPLAY_NAME));

//取得联系电话

//需要先取得出这个联系人的id

String contactsId = c.getString(c.getColumnIndex(Contacts._ID));

//由于联系电话保存在其他的表中,因此这里要进行关联查询

Cursor c2 = getContentResolver().query(Phone.CONTENT_URI,

null,Phone.CONTACT_ID + " = ?",new String[]{contactsId},null);

String num = null;

builder.append(name);

builder.append("-->");

c2.moveToFirst();

while(!c2.isAfterLast()){

num = c2.getString(c2.getColumnIndex(Phone.NUMBER));

builder.append(num + ",");

c2.moveToNext();

}

c2.close();

allPhoneNums.add(num);

c.moveToNext();

allValues.add(builder.toString());

}

c.close();

adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_list_item_1,allValues);

list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

//取得要拨的电话号码

String phoneNum = allPhoneNums.get(arg2);

//使用Intent来切换到打电话的界面上,并将要播的电话传进去,

Intent in = new Intent();

//设置现在要切换的功能

in.setAction(Intent.ACTION_CALL);

in.setData(Uri.parse("tel:" + phoneNum));

startActivity(in);

}

});

}

}

实现的布局xml:page_01.xml:

<LinearLayout 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" >

<ListView

android:id="@+id/list"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:cacheColorHint="#00000000" //防止屏幕闪烁

android:scrollbars="none" //去除滑动条

>

</ListView>

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: