如何使用contentrsolver读取系统中的联系人,并添加到sd中

本文介绍了一个简单的Android应用程序,该程序能够从设备中读取联系人信息,并将其存储到SD卡上的文本文件中。此外,应用还展示了如何将这些信息展示在一个列表视图中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//主界面

package com.example.contentresolver_exam1;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;




public class MainActivity extends Activity {
private ListView mListView;
//定义集合
private List<User> list_user=new ArrayList<User>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //或得控件id
        
        mListView=(ListView) findViewById(R.id.mylistview);
        intodata();
        //添加适配器
        mListView.setAdapter(adapter);
        //定义写入 sd卡的方法
       
    }


    /**
     * 构造写入sd卡的方法
     */
    private void writer(User u) {
// TODO Auto-generated method stub
//判断sd卡路径
    File path=Environment.getExternalStorageDirectory();
    String state=Environment.getExternalStorageState();
    if (state.equals(Environment.MEDIA_MOUNTED)) {
//向指定文件中写入数据
    File files=new File(path, "exam01.txt");
    StringBuilder sb=null;
    //判断文件是否存在
    if (!files.exists()) {
    try {
files.createNewFile();
FileOutputStream fos=new FileOutputStream(files,true);
//将字节流转换成字符流
OutputStreamWriter out=new OutputStreamWriter(fos);
//转换成缓冲流
BufferedWriter bw=new BufferedWriter(out);
bw.write(u.getName());
bw.write(u.getPhone());
bw.newLine();
bw.flush();
bw.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
}
}
}


//定义方法,用来存放查询的数据
    private void intodata() {
// TODO Auto-generated method stub
    //使用contentrsolver读取系统中的联系人
        Cursor cursor=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        User u=null;
        while(cursor.moveToNext()){
        //得到联系人的id
        String contactid=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
        //或得联系人的名字
        String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
       
        //根据id,获取联系人对应的电话号码
        Cursor phones=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactid, null, null);
        while(phones.moveToNext()){
        String phonenumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        u=new User(name, phonenumber);
        list_user.add(u);
        writer(u);
        }
        }
}




BaseAdapter adapter=new BaseAdapter() {

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder v;
if (convertView==null) {
v=new ViewHolder();
convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item, null);
v.name=(TextView) convertView.findViewById(R.id.name);
v.phone=(TextView) convertView.findViewById(R.id.phone);
convertView.setTag(v);
}else{
v=(ViewHolder) convertView.getTag();
}
v.name.setText(list_user.get(position).getName());
v.phone.setText(list_user.get(position).getPhone());
return convertView;
}

class ViewHolder{
TextView name,phone;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list_user.get(position);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return list_user.size();
}
};
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值