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

XML布局文件

    
XML布局2

<?xml version="1.0" encoding="utf-8"?>    

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 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();}@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 ops = new ArrayList();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);}}

需要的权限





更多相关文章

  1. Android(安卓)NestedScrollView嵌套RecyclerView的问题
  2. Android(安卓)UI布局优化的要点
  3. android 联系人详解
  4. android中对sim卡联系人的增删改查以及监听sim卡联系数据的改变
  5. android开发――获取手机联系人
  6. Android基础 : Android(安卓)Content Provider[转]
  7. android性能优化-渲染-嵌套标签
  8. NestedScrollingParent, NestedScrollingChild 详解
  9. Android(安卓)Activity 和 Task 设计指导(SDK)

随机推荐

  1. Android之通用MVP模式框架
  2. Android面试的一些总结
  3. ReactNative之Image在Android设置圆角图
  4. Android(安卓)View的绘制之 从源码了解me
  5. 描述下IOS和android系统流畅度的差别
  6. Android(安卓)Studio离线安装gradle(亲测
  7. android WebView与JS交互小结
  8. 【Android:简单夜间模式切换实现】夜间模
  9. 搜狐面试- Android事件分发机制完全解析,
  10. Android逆向之Xposed详解