Android手机通讯录备份和恢复项目 附下载地址**

  • 登录功能
  • 注册功能
  • 找回密码
  • 修改密码
  • 备份功能
  • 恢复功能
  • 恢复数据从服务器
  • 导出为Excel文件

登录功能

注册功能

找回密码

同注册功能

修改密码

同注册功能

备份功能

恢复功能

恢复数据从服务器


package com.example.contactcopy.RecoverFragment;import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Parcelable;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.contactcopy.Adapter.listViewAdapter;
import com.example.contactcopy.Entity.person;
import com.example.contactcopy.FirstPageActivity;
import com.example.contactcopy.R;
import com.example.contactcopy.Util.ExcelUtil;
import com.example.contactcopy.base.BaseFragment;import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;public class RecoverFragment extends BaseFragment implements View.OnClickListener {private Button getData;private Button OutContract;private ListView listView_get;private TextView getQty;private ImageView downToExcel;private static List<person> Data = new ArrayList<>();private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE" };//接收id值String id;Dialog dialog;@Overridepublic View initView() {View view = View.inflate(mContext, R.layout.fragment_recover, null);getData = (Button) view.findViewById(R.id.getData);downToExcel=(ImageView)view.findViewById(R.id.downToExcel);downToExcel.setOnClickListener(this);getQty=(TextView) view.findViewById(R.id.getQty);OutContract = (Button) view.findViewById(R.id.OutContract);listView_get = (ListView) view.findViewById(R.id.listview_get);getData.setOnClickListener(this);OutContract.setOnClickListener(this);return view;}public void showLoading(){dialog=new Dialog(getContext(),R.style.dialog);dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);dialog.setContentView(R.layout.loading);dialog.setCanceledOnTouchOutside(false);dialog.show();}/*** 申请读写权限* @param activity*/public static void verifyStoragePermissions(Activity activity) {try {//检测是否有写的权限int permission = ActivityCompat.checkSelfPermission(activity,"android.permission.WRITE_EXTERNAL_STORAGE");if (permission != PackageManager.PERMISSION_GRANTED) {// 没有写的权限,去申请写的权限,会弹出对话框ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);}} catch (Exception e) {e.printStackTrace();}}@Overridepublic void initData() {super.initData();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.getData:showLoading();Thread newThread = new RecoverFragment.NewThread();newThread.start();break;case R.id.OutContract:if(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_CONTACTS)!= PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(getActivity(),new String[] {Manifest.permission.WRITE_CONTACTS},1);}else {showLoading();for (person p : Data) {addContact(getContext(),p.getContract(), p.getNumber());}dialog.dismiss();Toast.makeText(getContext(),"还原成功,请前去系统通讯录查看",Toast.LENGTH_LONG).show();}break;case R.id.downToExcel:verifyStoragePermissions(getActivity());if(Data.isEmpty()){Toast.makeText(getContext(),"数据为空,请先获取数据!",Toast.LENGTH_LONG).show();}else{OutExcel();}break;}}/*** 导出为Excel文档*/public void OutExcel(){String filePath = Environment.getExternalStorageDirectory().getPath();File file = new File(filePath);if (!file.exists()) {file.mkdirs();}String excelFileName = "/备份精灵.xls";String[] title = {"姓名","号码"};String sheetName = "demoSheetName";filePath = filePath+excelFileName;ExcelUtil.initExcel(filePath, title);ExcelUtil.writeObjListToExcel(Data, filePath, getContext());}/*** @param requestCode* @param permissions* @param grantResults*/@Overridepublic void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){switch (requestCode){case 1:if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){for (person p : Data) {addContact(getContext(),p.getContract(), p.getNumber());}}else {Toast.makeText(getContext(),"该权限必须打开",Toast.LENGTH_LONG).show();}break;default:}}/*** 接收从Activity传来的值** @param activity*/@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);id = ((FirstPageActivity) activity).getTitles();}public String parseJson() {JSONObject jsonObject = new JSONObject();jsonObject.put("id", id);return jsonObject.toString();}class NewThread extends Thread {@Overridepublic void run() {Looper.prepare();final String urlPath = "http://192.168.43.81:8080/Contract/Servlet/QueryPerson";URL url;try {StringBuffer sb = new StringBuffer();url = new URL(urlPath);String content = parseJson();HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setDoOutput(true);//设置允许输出conn.setRequestMethod("POST");conn.setRequestProperty("User-Agent", "Fiddler");conn.setRequestProperty("Content-Type", "application/json");OutputStream os = conn.getOutputStream();os.write(content.getBytes());os.close();int code = conn.getResponseCode();if (code == 200) {BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String responseData;while ((responseData = in.readLine()) != null) {sb.append(responseData);}if (!sb.toString().isEmpty()) {//解析json//Log.d("KKKKKK",sb.toString());JSONObject jsonObject = JSONObject.parseObject(sb.toString());JSONArray jsonArray = (JSONArray) jsonObject.get("data");List<person> Datas = new ArrayList<>();if (jsonArray.size() > 0) {for (int i = 0; i < jsonArray.size(); i++) {JSONObject job = jsonArray.getJSONObject(i);String data1 = job.getString("contract");String data2 = job.getString("tele");person p = new person(data1,data2);Datas.add(p);}}Bundle bundle=new Bundle();bundle.putParcelableArrayList("Datas", (ArrayList<? extends Parcelable>) Datas);Message msg=new Message();msg.setData(bundle);handlers.sendMessage(msg);}else {Toast.makeText(getContext(), "数据为空", Toast.LENGTH_SHORT).show();}in.close();}} catch (Exception e) {// TODO: handle exceptiondialog.dismiss();Toast.makeText(getContext(),"数据为空",Toast.LENGTH_LONG).show();}Looper.loop();}}public Handler handlers = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Bundle bundle = msg.getData();Data=bundle.getParcelableArrayList("Datas");listView_get.setAdapter(new listViewAdapter(getActivity(), Data));getQty.setText("联系人信息("+Data.size()+"条)");dialog.dismiss();}};/*** 向系统通讯录插入数据** @param name* @param phoneNumber*/public void addContact(Context context,String name, String phoneNumber) {ContentValues values = new ContentValues();// 向RawContacts.CONTENT_URI空值插入,// 先获取Android系统返回的rawContactId// 后面要基于此id插入值Uri rawContactUri = context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);long rawContactId = ContentUris.parseId(rawContactUri);values.clear();values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);// 内容类型values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);// 联系人名字values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);// 向联系人URI添加联系人名字context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);// 联系人的电话号码values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber);// 电话类型values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);// 向联系人电话号码URI添加电话号码context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);values.clear();}
}

导出为Excel文件

public class ExcelUtil {private static WritableFont arial14font = null;private static WritableCellFormat arial14format = null;private static WritableFont arial10font = null;private static WritableCellFormat arial10format = null;private static WritableFont arial12font = null;private static WritableCellFormat arial12format = null;private final static String UTF8_ENCODING = "UTF-8";/*** 单元格的格式设置 字体大小 颜色 对齐方式、背景颜色等...*/private static void format() {try {arial14font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD);arial14font.setColour(jxl.format.Colour.LIGHT_BLUE);arial14format = new WritableCellFormat(arial14font);arial14format.setAlignment(jxl.format.Alignment.CENTRE);arial14format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);arial14format.setBackground(jxl.format.Colour.VERY_LIGHT_YELLOW);arial10font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);arial10format = new WritableCellFormat(arial10font);arial10format.setAlignment(jxl.format.Alignment.CENTRE);arial10format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);arial10format.setBackground(Colour.GRAY_25);arial12font = new WritableFont(WritableFont.ARIAL, 10);arial12format = new WritableCellFormat(arial12font);//对齐格式arial10format.setAlignment(jxl.format.Alignment.CENTRE);//设置边框arial12format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);} catch (WriteException e) {e.printStackTrace();}}/*** 初始化Excel** @param filePath* @param fileName 导出excel存放的地址(目录)* @param colName excel中包含的列名(可以有多个)*/public static void initExcel( String fileName, String[] colName) {format();WritableWorkbook workbook = null;try {File file = new File(fileName);if (!file.exists()) {file.createNewFile();}workbook = Workbook.createWorkbook(file);//设置表格的名字WritableSheet sheet = workbook.createSheet("账单", 0);//创建标题栏sheet.addCell((WritableCell) new Label(0, 0, fileName, arial14format));for (int col = 0; col < colName.length; col++) {sheet.addCell(new Label(col, 0, colName[col], arial10format));}//设置行高sheet.setRowView(0, 340);workbook.write();} catch (Exception e) {e.printStackTrace();} finally {if (workbook != null) {try {workbook.close();} catch (Exception e) {e.printStackTrace();}}}}@SuppressWarnings("unchecked")public static <T> void writeObjListToExcel(List<T> objList, String fileName, Context c) {if (objList != null && objList.size() > 0) {WritableWorkbook writebook = null;InputStream in = null;try {WorkbookSettings setEncode = new WorkbookSettings();setEncode.setEncoding(UTF8_ENCODING);in = new FileInputStream(new File(fileName));Workbook workbook = Workbook.getWorkbook(in);writebook = Workbook.createWorkbook(new File(fileName), workbook);WritableSheet sheet = writebook.getSheet(0);for (int j = 0; j < objList.size(); j++) {person projectBean = (person) objList.get(j);List<String> list = new ArrayList<>();list.add(projectBean.getContract());list.add(projectBean.getNumber());for (int i = 0; i < list.size(); i++) {sheet.addCell(new Label(i, j+1, list.get(i), arial12format));if (list.get(i).length() <= 4) {//设置列宽sheet.setColumnView(i, list.get(i).length()+8);} else {//设置列宽sheet.setColumnView(i, list.get(i).length()+5);}}//设置行高sheet.setRowView(j+1, 350);}writebook.write();Toast.makeText(c, "导出Excel成功,请前往本地SD卡查看", Toast.LENGTH_SHORT).show();} catch (Exception e) {e.printStackTrace();} finally {if (writebook != null) {try {writebook.close();} catch (Exception e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}}}

项目demo下载地址: 链接:https://pan.baidu.com/s/1scergDXkxJrkZmFJ5rB90g 提取码:49z3.

Android手机通讯录备份和恢复项目相关推荐

  1. android备份手机号码,Android手机通讯录备份还原代码

    最近想写段Android程序玩玩.开发环境 Eclipse ,Android 2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclip ...

  2. android手机通讯录备份还原代码,安卓手机误删联系人恢复及备份技巧总汇

    原标题:安卓手机误删联系人恢复及备份技巧总汇 现在很多手机都不再提供将联系人存入SIM卡中的功能了,所以如果你还习惯性的将联系人储存在手机内存当中,一旦手机丢失或者手机数据遗失,那么少则几十动辄几百的 ...

  3. android手机通讯录备份还原代码,android手机通讯录备份还原代码

    最近想写段android程序玩玩. 开发环境 eclipse ,android2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclip ...

  4. android手机通讯录没了,手机联系人不见了怎么恢复?手机通讯录误删如何恢复...

    手机联系人不见了怎么恢复?手机通讯录误删如何恢复?面对这样的问题你是不是也很惆怅?今天我们要解答的不仅仅是苹果手机通讯录怎么恢复的方法还有安卓手机通讯录恢复的方法,对于手机通讯录丢失后怎么恢复的方法, ...

  5. 修复手机通讯服务器软件,手机通讯录误删怎么恢复?恢复原来如此简单,后悔太晚知道...

    原标题:手机通讯录误删怎么恢复?恢复原来如此简单,后悔太晚知道 说起手机通讯录,它对于所有的手机用户来讲都是至关重要的.不知道你们有没有发生过误删重要联系人的情况,下面就给大家分享两种直接有效的还原方 ...

  6. 一篇很好的关于Android的本科毕业论文《基于android手机通讯录的设计与实现毕业论文》转自百度

    本文转自: http://wenku.baidu.com/view/bb7dad58804d2b160b4ec058.html 相应的word文档csdn下载地址: http://download.c ...

  7. 手机通讯录备份代码实现二

    手机通讯录备份代码实现二 package app.utils;import java.util.ArrayList; import java.util.List;import android.cont ...

  8. 手机通讯录备份代码实现一

    手机通讯录备份代码实现一 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFo ...

  9. 手机通讯录联系人怎么恢复 快速恢复的方法

    手机通讯录联系人怎么恢复?作为手机中最基础的功能,电话功能的地位一直都是那么的不可撼动.因为我们需要使用手机联系他人,想要联系他人,我们就会使用到手机里的通讯录,如果我们不小心将手机通讯录联系人删除了 ...

最新文章

  1. 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD
  2. 图灵访谈系列之一:陈世欣谈产品经理与社区
  3. SQLServer中使用Split功能分割字符串
  4. 代码控制UI,View
  5. python 将实例用作属性_将类实例用作类属性、描述符和属性
  6. C语言程序练习- L1-010 比较大小 (10分)
  7. arduino代码_纯纯小白开发arduino--我的调试经验
  8. jvm面试之 Java内存模型之线程独占部分,线程共享部分,常问问题分析
  9. JavaScript高级程序设计(2)在HTML中使用JavaScript
  10. AS3.1.2配置gradle阿里云镜像(可用)
  11. POJ读书笔记6.1 - 约瑟夫问题 2746
  12. Atitit. Toast alert loading js控件   atiToast v2新特性
  13. Ubuntu 20.04.2 LTS 系统美化 (UOS主题)
  14. 可决系数、相关系数、均方误差
  15. 【考研英语】作文套话(自用)
  16. 用友U9数据库--用户对应的权限明细查询
  17. Android时间与服务器同步方案
  18. H5身份证上传识别功能
  19. Java 快速排序,递归排序算法
  20. VPX信号处理板VPX3U-2DSP-C6678

热门文章

  1. 如何压缩照片到30kb以下?三个方法
  2. 正则表达式 - (?!), (?:), (?=)
  3. 基于java的在线学生管理系统【原创】
  4. 汉语言文学研究生C,汉语言文学专业学生考研要考什么科目
  5. Mongodb从配置到应用
  6. Unity:排序图层
  7. 苹果6怎么截屏_iPhone怎么设置双击截屏 苹果手机双击截屏图文教程
  8. 5种方法输出10的阶乘
  9. gog无效的验证码_GOG Galaxy Beta,适用于复古游戏的KADE miniConsole +和更多游戏新闻
  10. mysql 手工sql注入_【sql注入专题02】Mysql手工注入流程