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

Android批量添加删除联系人

2015-03-10 14:29 260 查看
项目中的一个小需求,需要批量导入电话号码进入手机里面,号段固定了,可以自己添加号段的选项
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"
android:orientation="vertical"
tools:context=".MainActivity" >

<Button
android:id="@+id/xz"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#0080FF"
android:gravity="center_vertical|right"
android:onClick="onClick"
android:paddingRight="10dp"
android:text="选择地区"
android:textColor="#ffffff"
android:textSize="16sp"
android:textStyle="bold" />

<TextView
android:id="@+id/number_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#0080FF" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
android:orientation="horizontal" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0080FF"
android:onClick="onClick"
android:padding="10dp"
android:text="添加号码"
android:textColor="#ffffff"
android:textSize="16sp" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:background="#0080FF"
android:onClick="onClick"
android:padding="10dp"
android:text="清除通讯录"
android:textColor="#ffffff"
android:textSize="16sp" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:background="#0080FF"
android:onClick="onClick"
android:padding="10dp"
android:text="查看通讯录"
android:textColor="#ffffff"
android:textSize="16sp" />
</LinearLayout>

</LinearLayout>XML布局2
<pre name="code" class="java"><?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" >

<Button
android:id="@+id/fh"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#0080FF"
android:gravity="center_vertical|left"
android:onClick="onClick"
android:paddingLeft="10dp"
android:text="返回"
android:textColor="#ffffff"
android:textSize="16sp"
android:textStyle="bold" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:orientation="vertical" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="移动" />

<com.text.MyGridView
android:id="@+id/yidong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:numColumns="5" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="电信" />

<com.text.MyGridView
android:id="@+id/dianxin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:numColumns="5" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="联通" />

<com.text.MyGridView
android:id="@+id/liantong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:numColumns="5" />
</LinearLayout>
</LinearLayout>
</ScrollView>

</LinearLayout>

MainActivity.java
package com.text;

import java.util.ArrayList;
import java.util.List;

import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
private ContentValues values;
TextView textView;
private String number2 = "";
List<Number> numbers;
ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.number_text);
numbers = new ArrayList<MainActivity.Number>();
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
if (number2.equals("")) {
Toast.makeText(this, "请选择地区", 0).show();
}else{
dialog("添加联系人...");
addNumber();
}
break;
case R.id.button2:
dialog("清除通讯录...");
deleteNumber();
break;
case R.id.xz:
Intent intent = new Intent(MainActivity.this, DqActicity.class);
startActivityForResult(intent, 100);
break;
case R.id.button3:
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_VIEW);
intent2.setData(Contacts.People.CONTENT_URI);
startActivity(intent2);
break;
}

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100) {
if (resultCode == 101) {
number2 = data.getExtras().getString("number");
textView.setText("添加的号码为"+ number2 + "08400000" +"~" + number2 + "08409999之间\n每次只添加100个" );
}
if (resultCode == 102) {
if (!number2.equals("")) {
textView.setText("添加的号码为"+ number2 + "08400000" +"~" + number2 + "08409999之间\n每次只添加100个" );
}
}
}
}

private void addNumber() {
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 100; i++) {
// 创建一个空的ContentValues
values = new ContentValues();
// 向rawcontent。content——uri执行一个空值插入
// 目的是获取系统返回的rawcontactid
Uri rawcontacturi = getContentResolver().insert(
RawContacts.CONTENT_URI, values);
long rawcontactid = ContentUris.parseId(rawcontacturi);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawcontactid);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
// 设置联系人电话号码
if (i < 10) {
String m = "000" +i;
values.put(Phone.NUMBER, number2+"0840"+m);
} else if (i >= 10 && i < 100) {
String m = "00" +i;
values.put(Phone.NUMBER, number2+"0840"+m);
}else if (i >= 100 && i < 1000) {
String m = "0" +i;
values.put(Phone.NUMBER, number2+"0840"+m);
} else{
values.put(Phone.NUMBER, number2+"0840"+i);
}
// 设置电话类型
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
// 向联系人电话号码URI添加电话号码
getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
}
progressDialog.cancel();
}
}).start();
}

private void getPhoneNumber(){

ContentResolver resolver = MainActivity.this.getContentResolver();
// 获取手机联系人
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,null, null, null, null); //传入正确的uri
if(phoneCursor!=null){
while(phoneCursor.moveToNext()){
Number number = new Number();
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); //获取联系人number
if(TextUtils.isEmpty(phoneNumber)){
continue;
}
number.setNumber(phoneNumber);
numbers.add(number);
}
}
phoneCursor.close();
}

private class Number{
String number;

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

}

private void deleteNumber() {
new Thread(new Runnable() {
public void run() {
getPhoneNumber();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < numbers.size(); i++) {
delContact(MainActivity.this, numbers.get(i).getNumber());
}
progressDialog.cancel();
}
}).start();

}

private void delContact(Context context, final String name) {
Cursor cursor = getContentResolver().query(Data.CONTENT_URI,
new String[] { Data.RAW_CONTACT_ID },
ContactsContract.Contacts.DISPLAY_NAME + "=?",
new String[] { name }, null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if (cursor.moveToFirst()) {
do {
long Id = cursor.getLong(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
ops.add(ContentProviderOperation.newDelete(ContentUris.withAppendedId(RawContacts.CONTENT_URI, Id)).build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY,ops);
} catch (Exception e) {
e.printStackTrace();
}
} while (cursor.moveToNext());
cursor.close();
}
}

private void dialog(String mm){
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(mm);
progressDialog.setIndeterminate(false);
progressDialog.setCancelable(false);
progressDialog.show();
}

}

DqActicity.java
package com.text;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class DqActicity extends Activity implements OnClickListener{

String[] yidong = {"134","135","136","137","138","139"
,"147","150","151","152","154","157","158"
,"159","178","182","183","184","187","188"};
String[] liantong = {"130","131","132","145","155"
,"156","176","185","186"};
String[] dianxin = {"133","153","177","180","181","189"};

Number number;
Intent intent;
String numebrs = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xuandiqu);

MyGridView ydGridView = (MyGridView) findViewById(R.id.yidong);
number = new Number(this, yidong);
ydGridView.setAdapter(number);
MyGridView ldGridView = (MyGridView) findViewById(R.id.liantong);
number = new Number(this, liantong);
ldGridView.setAdapter(number);
MyGridView dxGridView = (MyGridView) findViewById(R.id.dianxin);
number = new Number(this, dianxin);
dxGridView.setAdapter(number);
dxGridView.setOnItemClickListener(new OnItem3());
ldGridView.setOnItemClickListener(new OnItem2());
ydGridView.setOnItemClickListener(new OnItem());
}

class OnItem implements OnItemClickListener{

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent intent = new Intent(DqActicity.this,MainActivity.class);
intent.putExtra("number", yidong[arg2]);
setResult(101, intent);
finish();
}

}
class OnItem2 implements OnItemClickListener{

@Override
public void onItemClick(Ada
91a9
pterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent intent = new Intent(DqActicity.this,MainActivity.class);
intent.putExtra("number", liantong[arg2]);
setResult(101, intent);
finish();
}

}
class OnItem3 implements OnItemClickListener{

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent intent = new Intent(DqActicity.this,MainActivity.class);
intent.putExtra("number", dianxin[arg2]);
setResult(101, intent);
finish();
}

}

class Number extends BaseAdapter{
Context context;
String[] number;

public Number(Context context,String[] number){
this.context = context;
this.number = number;
}
@Override
public int getCount() {
return number.length;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.number, null);
TextView textView = (TextView) convertView.findViewById(R.id.number);
textView.setText(number[position]);
}
return convertView;
}

}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fh:
onBackPressed();
break;

default:
break;
}
}

@Override
public void onBackPressed() {
Intent intent = new Intent(DqActicity.this,MainActivity.class);
setResult(102, intent);
finish();
}

}

自定义的Gridview,嵌入ScrollView会出现GridView数据显示不全的情况,类似的有ListView嵌套在ScrollView中、GridView嵌套ListView.....

就是修改嵌套组件的高度,类似的宽度也是一样
package com.text;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

public class MyGridView extends GridView{

public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyGridView(Context context) {
super(context);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int h = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, h);
}

}

需要的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 手机联系人