Android批量添加删除联系人

项目中的一个小需求,需要批量导入电话号码进入手机里面,号段固定了,可以自己添加号段的选项

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(AdapterView<?> 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" />




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值