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

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" ><Buttonandroid: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" /><TextViewandroid:id="@+id/number_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textColor="#0080FF" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:gravity="center"android:orientation="horizontal" ><Buttonandroid: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" /><Buttonandroid: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" /><Buttonandroid: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" ><Buttonandroid: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" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="移动" /><com.text.MyGridViewandroid:id="@+id/yidong"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:numColumns="5" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电信" /><com.text.MyGridViewandroid:id="@+id/dianxin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:numColumns="5" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="联通" /><com.text.MyGridViewandroid: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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.number_text);numbers = new ArrayList<MainActivity.Number>();}@Overridepublic 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;}}@Overrideprotected 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++) {// 创建一个空的ContentValuesvalues = new ContentValues();// 向rawcontent。content——uri执行一个空值插入// 目的是获取系统返回的rawcontactidUri 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); //传入正确的uriif(phoneCursor!=null){while(phoneCursor.moveToNext()){Number number = new Number();String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); //获取联系人numberif(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 = "";@Overrideprotected 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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;}@Overridepublic int getCount() {return number.length;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic 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;}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.fh:onBackPressed();break;default:break;}}@Overridepublic 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);}@Overrideprotected 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批量添加删除联系人相关推荐

  1. linux小脚本批量添加/删除用户

    批量添加/删除用户,当输入add时,判断用户是否存在,存在则显示存在,不存在则添加:当输入del时,判断用户是否存在,存在则删除用户,不存在则显示不存在. #!/bin/bash if [ $1 == ...

  2. android listview remove 动画,给Android ListView添加删除item动画

    给Android ListView添加删除item动画 给listview删除一个item的时候加上一个折叠动画,感觉效果会好一点. 步骤是当删除一个view,先用动画把view的高度改变,看上去就是 ...

  3. Windows 批量添加删除路由资源性能优化

    首先,本文只涉及如何优化Windows批量添加删除路由资源的速度优化. 基于虚拟网卡来实现虚拟网络的组建的架构图如下所示: 图片来自网络 起因: 一般来说,私有网络的一个资源对应本地的一条路由(比如: ...

  4. Android批量添加联系人到通讯录

    由于工作上的需要,把数据库中备份的联系人添加到通讯录,一般都有几百条记录,插入一条数据系统默认commit一次,这样效率就降低了,如果把所有的数据都添加进去后再commit效率就不一样,这就需要事务 ...

  5. Android 批量插入删除手机联系人

    找遍了网上,都没找到批量删除手机联系人好友的方法,有也效率特别低,删除200个人都要几十秒,反而批量添加联系人速度很快 批量插入联系人 public static boolean batchAddCo ...

  6. android批量添加联系人,Android实现批量添加联系人到通讯录

    由于工作上的需要,把数据库中备份的联系人添加到Android通讯录,一般都有几百条记录,插入一条数据系统默认commit一次,这样效率 由于工作上的需要,把数据库中备份的联系人添加到Android通讯 ...

  7. android删除界面工具,Android手机添加/删除桌面图标和插件(图文)

    基于android系统的手机还是很人性化的,安装容易删除和卸载也不难,朴素的风格下对新手来说刚开始操作还是会有些不适应的. 工具/原料 android手机 方法/步骤 首先还解锁进入手机桌面: 进入桌 ...

  8. 什么是“常用联系人”,如何添加\删除联系人?

    "常用联系人"是您最常使用到的联系人,将他们收藏于此,您可以方便的随时对某用户发起操作."常用联系人"中不支持分组,所有联系人按照字母顺序排列与此. 添加您可以 ...

  9. android 动态添加删除控件,求教Android,动态添加到控件能动态删除吗?

    protected View createView() {//动态添加组件 Button btn = new Button(this);//动态创建按钮 btn.setId(index++); btn ...

最新文章

  1. 简明python教程购买-简明Python3教程 6.基础
  2. 当Linux提权不能反弹Shell时利用metasploit进行提权
  3. labelme安装_语义图像分割-DIGITS2-labelme数据集自动扩展
  4. java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal问题解决
  5. SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装
  6. 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...
  7. python打包成exe fail to ex_寻求帮助:pyinstaller打包.exe
  8. Java Web提交任务到Spark Spark通过Java Web提交任务
  9. 一个自定义的C#数据库操作基础类 SqlHelper
  10. Windows Server 2003至Windows Server 2008的迁移
  11. HTC vive Eye pro眼动追踪初识
  12. Nodejs解压版安装
  13. python输入一个三位数输出百位十位个位_“任意输入一个三位数,输出这个三位数的百位、十位和个位,并且计算十位百位个位的和。”c语言程序...
  14. 证件照怎么换底色?不用ps,Word就能一键更换红白蓝底色
  15. 电脑玩CF、DNF、LOL等游戏掉帧.卡顿.黑屏怎么办?驱动人生十大游戏检测图文教程
  16. Cannot determine path to ‘tools.jar‘ library for 1.8 (C:/Program Files/Java/jdk-18)
  17. Android 网络质量 + 下载测速 (facebook/network-connection-class 使用)
  18. 力扣刷题 DAY_62 回溯
  19. ECSHOP微信支付插件ECSmart手机版,ECSmart微信支付手机版
  20. 华为日历怎么显示一月_华为P20使用感受

热门文章

  1. 《天幕红尘》笔记与思考(六)因缺而需
  2. 王者荣耀微信哪个服务器人最少,王者荣耀:一句话总结q区和微信区玩家的区别,简直不要太真实...
  3. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 Summarizing documents with T5-large
  4. 新品上架,标题怎样写,关键字怎样选,如何选择合适自己店铺商品的关键词
  5. 安卓手机反应慢又卡怎么办_安卓手机越用越卡怎么办?4个技巧让你多用两年,快相互告知吧!...
  6. 第七周项目2-体重检测系统
  7. enumerate的用法
  8. MySQL5.7主从数据库复制(Win10)
  9. 给Android开发者的kotlin使用
  10. 如何删除 C:\Users\lenovo\Documents\Tecent Files