80,350
社区成员
发帖
与我相关
我的任务
分享
public class MainActivity extends Activity {
LayoutInflater inflater;
Context mcontext;
EditText input_contact;//输入联系人的信息来查找联系人
ListView show_contact;//显示所有的联系人
Button new_contact;//新建联系人
List<Map<String,String>> contacts_infos=new ArrayList<Map<String,String>>();
listViewAdapter lvadapter;
//初始化各类控件
public void initfindViewById(){
input_contact=(EditText) findViewById(R.id.input_contact);
show_contact=(ListView) findViewById(R.id.show_contacts);
new_contact=(Button) findViewById(R.id.new_contact);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initfindViewById();
try {
init();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new_contact.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,AddActivity.class);
startActivity(intent);
}
});
}
public class deletContactListener implements OnLongClickListener{
@Override
public boolean onLongClick(View v) {
final int i=(int)v.getTag();
TextView tv_name=(TextView) v.findViewById(R.id.contact_name);
final String name=tv_name.getText().toString();
new AlertDialog.Builder(MainActivity.this)//此处括号中不能使用mcontext,应为他直接
//通过getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
.setMessage("确定删除联系人吗?")
.setTitle("提示")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//设置你的操作事项
ContentResolver resolver =getContentResolver();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Cursor cursor = resolver.query(uri, new String[]{Data._ID},"display_name=?", new String[]{name}, null);
if(cursor.moveToFirst()){
int id = cursor.getInt(0);
//根据id删除data中的相应数据
resolver.delete(uri, "display_name=?", new String[]{name});
uri = Uri.parse("content://com.android.contacts/data");
resolver.delete(uri, "raw_contact_id=?", new String[]{id+""});
}
//对于List<Map<String,String>>,删除list集合中的一个元素,只需要remove(i),i就是列号。
contacts_infos.remove(i);//删除当前视图上的i列元素,但没有删除数据库中元素。
lvadapter.notifyDataSetChanged();
}
})
.setNegativeButton("取消",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
return true;
}
}
public void init() throws Exception{
mcontext=getApplicationContext();
inflater=LayoutInflater.from(mcontext);
TestContact();
Log.i("info:",contacts_infos.toString());
lvadapter=new listViewAdapter();
show_contact.setAdapter(lvadapter);
}
//为lisview设置适配器
public class listViewAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return contacts_infos.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertview, ViewGroup parent) {
convertview=inflater.inflate(R.layout.listview1, null);
TextView contact_name1=(TextView) convertview.findViewById(R.id.contact_name);
TextView contact_tel1=(TextView) convertview.findViewById(R.id.contact_tel);
contact_name1.setText("姓名:"+contacts_infos.get(position).get("name"));
int a=contacts_infos.get(position).get("tel").indexOf("[");
int b=contacts_infos.get(position).get("tel").indexOf("]");
String s=contacts_infos.get(position).get("tel").substring(1, b);
contact_tel1.setText(s);
convertview.setTag(position);
convertview.setOnClickListener(new itemOnClickListener());
convertview.setOnLongClickListener(new deletContactListener());
return convertview;
}
}
public class itemOnClickListener implements OnClickListener{
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
TextView con_tel=(TextView) view.findViewById(R.id.contact_tel);
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+con_tel.getText().toString()));
startActivity(intent);
}
}
//查询所有联系人的姓名,电话,邮箱
public void TestContact() throws Exception {
ContentResolver cr=getContentResolver();
Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while(cursor.moveToNext()){
Map<String,String> map=new HashMap<String,String>();
//获取联系人的相关的信息
String id=cursor.getString( cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//根据联系热的id获取联系人的电话号码
Cursor phone=getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+id,
null,
null);
ArrayList<String> detail=new ArrayList<String>();
//得到对应联系人的电话号码
while(phone.moveToNext()){
String phoneNum=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
detail.add(phoneNum);
}
phone.close();
//将联系人的信息添加到map集合中
map.put("name", name);
map.put("tel", detail.toString());
contacts_infos.add(map);
}
cursor.close();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
public class AddActivity extends Activity{
EditText add_contact_name;
EditText add_contact_tel;
Button sure;//addContact界面确定按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addcontact);
add_contact_name=(EditText) findViewById(R.id.add_contact_name);
add_contact_tel=(EditText) findViewById(R.id.add_contact_tel);
sure=(Button) findViewById(R.id.sure);
sure.setOnClickListener(new addContactOnClickListener());
}
public class addContactOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
ContentValues values=new ContentValues();
String add_name=add_contact_name.getText().toString();
String add_tel=add_contact_tel.getText().toString();
Uri rawContactUri=getBaseContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId=ContentUris.parseId(rawContactUri);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
// 内容类型
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
// 联系人名字
values.put(StructuredName.GIVEN_NAME, add_name);
// 向联系人URI添加联系人名字
getContentResolver().insert(Data.CONTENT_URI, values);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
// 联系人的电话号码
values.put(Phone.NUMBER, add_tel);
// 电话类型
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
// 向联系人电话号码URI添加电话号码
getContentResolver().insert(Data.CONTENT_URI, values);
values.clear();
Intent intent=new Intent(AddActivity.this,MainActivity.class);
startActivity(intent);
}
}
}
<RelativeLayout 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"
tools:context="com.example.callphones.MainActivity" >
<EditText
android:inputType="text"
android:id="@+id/input_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:textSize="25sp"
/>
<ListView
android:id="@+id/show_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:headerDividersEnabled="false"
android:layout_below="@+id/input_contact"
/>
<Button
android:id="@+id/new_contact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="添加联系人"
android:layout_marginBottom="10dp"
android:padding="10dp"
/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="姓名"
android:textSize="20sp"
/>
<EditText
android:id="@+id/add_contact_name"
android:layout_width="match_parent"
android:layout_height="30dp"
android:padding="5dp"
android:textSize="20sp"
android:hint="请输入联系人的姓名"
/>
<TextView
android:id="@+id/tv_tel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="号码"
android:textSize="20sp"
/>
<EditText
android:id="@+id/add_contact_tel"
android:layout_width="match_parent"
android:layout_height="30dp"
android:padding="5dp"
android:textSize="20sp"
android:hint="请输入联系人的电话号码"
/>
<Button
android:id="@+id/sure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="20sp"
android:layout_gravity="center_horizontal"
android:text="确定"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/contact_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="名字"
android:textSize="20sp"
/>
<TextView
android:id="@+id/contact_tel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="电话"
android:textSize="20sp"
/>
</LinearLayout>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>