给大家分享一下我的一个Android工具类,可以获取手机里面的各种信息,包括拨打电话,获取所有联系人姓名及电话,插入联系人姓名及电话,插入联系人姓名及电话,插入通话记录,获取用户所有短信,批量插入短信,读取文件从SDcard,写入文件到SDcard。。。。。

package com.canlong.util;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;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.database.sqlite.SQLiteException;import android.net.Uri;import android.os.Environment;import android.provider.CallLog;import android.provider.ContactsContract;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.RawContacts;import android.provider.ContactsContract.RawContacts.Data;import com.canlong.javabean.CallLogModel;import com.canlong.javabean.ContactsInfo;import com.canlong.javabean.SmsInfo;public class Util {/* * 检测SDcard是否正常 */public static boolean checkSDcard() {return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);}/* * 读取文件从SDcard */public static String readFileFromSDcard(String path, String filename)throws IOException {if (!checkSDcard()) {return null;}path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/" + path;File dir = new File(path);if (!dir.exists())dir.mkdirs();FileInputStream inStream = new FileInputStream(new File(dir, filename));ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) {outStream.write(buffer, 0, len);}byte[] data = outStream.toByteArray();outStream.close();inStream.close();return new String(data);}/* * 写入文件到SDcard */public static boolean writeFileToSDcard(String path, String filename,String content, boolean append) throws IOException {byte[] buffer = content.getBytes();if (!checkSDcard()) {return false;}path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/" + path;File dir = new File(path);if (!dir.exists())dir.mkdirs();FileOutputStream out = new FileOutputStream(new File(dir, filename),append);out.write(buffer);out.flush();out.close();return true;}/* * 拨打电话 */public static void callPhone(String number, Context context) {Intent intent = new Intent();intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:" + number));context.startActivity(intent);}/* * 获取所有联系人姓名及电话 */public static List<ContactsInfo> getAllContacts(Context context) {List<ContactsInfo> resultList = new ArrayList<ContactsInfo>();ContentResolver cr = context.getContentResolver();Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, null);while (cur.moveToNext()) {// 得到名字String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));// 得到电话号码String contactId = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); // 获取联系人的ID号,在SQLite中的数据库IDCursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null);while (phone.moveToNext()) {String strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); // 手机号码字段联系人可能不止一个resultList.add(new ContactsInfo(name, strPhoneNumber));}}return resultList;}/* * 插入联系人姓名及电话 */public static void insertContacts(String name, String number,Context context) {if (name == null || number == null)return;ContentResolver cr = context.getContentResolver();// 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactIdContentValues values = new ContentValues();Uri rawContactUri = cr.insert(RawContacts.CONTENT_URI, values);long rawContactId = ContentUris.parseId(rawContactUri);values.clear();// 往data表入姓名数据values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);values.put(StructuredName.DISPLAY_NAME, name);cr.insert(ContactsContract.Data.CONTENT_URI, values);// 往data表入电话数据values.clear();values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);values.put(Phone.NUMBER, number);values.put(Phone.TYPE, Phone.TYPE_MOBILE);cr.insert(ContactsContract.Data.CONTENT_URI, values);}/* * 批量插入联系人姓名及电话 */public static void insertContactsList(List<ContactsInfo> listData,Context context) throws Exception {// 文档位置:reference\android\provider\ContactsContract.RawContacts.htmlArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();ContentResolver cr = context.getContentResolver();// 插入第几个人的信息int rawContactInsertIndex = 0;for (int i = 0; i < listData.size(); i++) {ContactsInfo info = listData.get(i);// 插入当前编号人的空行ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null).build());// 插入当前编号人的姓名ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE).withValue(StructuredName.GIVEN_NAME, info.getName()).build());// 插入当前编号人的电话ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER, info.getNumber()).withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());// rawContactInsertIndex++;cr.applyBatch(ContactsContract.AUTHORITY, ops);ops.clear();}}/* * 插入通话记录 */public static boolean insertCallLog(List<CallLogModel> listDate,Context context){for(int i=0;i<listDate.size();i++){CallLogModel info = listDate.get(i);ContentValues values = new ContentValues();     values.put(CallLog.Calls.NUMBER, info.getNumber());    values.put(CallLog.Calls.DATE, info.getDate());    values.put(CallLog.Calls.DURATION, info.getDuration());    values.put(CallLog.Calls.TYPE,info.getType());    values.put(CallLog.Calls.NEW, info.getRend());//0已看1未看     context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);}return true;}/* * 获取用户所有短信 */public static List<SmsInfo> getAllSms(Context context) {List<SmsInfo> list = new ArrayList<SmsInfo>();final String SMS_URI_ALL = "content://sms/";try {ContentResolver cr = context.getContentResolver();String[] projection = new String[] { "_id", "address", "person","body", "date", "type" };Uri uri = Uri.parse(SMS_URI_ALL);Cursor cur = cr.query(uri, projection, null, null, "date desc");while (cur.moveToNext()) {String name;String phoneNumber;String smsbody;long date;int type;name = cur.getString(cur.getColumnIndex("person"));phoneNumber = cur.getString(cur.getColumnIndex("address"));smsbody = cur.getString(cur.getColumnIndex("body"));date = Long.parseLong(cur.getString(cur.getColumnIndex("date")));type = cur.getInt(cur.getColumnIndex("type"));// Uri personUri = Uri.withAppendedPath(// ContactsContract.PhoneLookup.CONTENT_FILTER_URI,// phoneNumber);// Cursor localCursor = cr.query(personUri, new String[] {// PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID,// PhoneLookup._ID }, null, null, null);//// if (localCursor.getCount() != 0) {// localCursor.moveToFirst();// name = localCursor.getString(localCursor// .getColumnIndex(PhoneLookup.DISPLAY_NAME));// }if (smsbody == null)smsbody = "";list.add(new SmsInfo(name, phoneNumber, smsbody, date, type));}} catch (SQLiteException ex) {}return list;}/* * 批量插入短信 */public static boolean insertSmsList(List<SmsInfo> listData, Context context) {Uri mSmsUri = Uri.parse("content://sms/inbox");for (int i = 0; i < listData.size(); i++) {SmsInfo info = listData.get(i);ContentValues values = new ContentValues();values.put("address", info.getNumber());values.put("body", info.getContent());values.put("date", info.getDate());values.put("read", info.getRead());values.put("type", info.getType());//values.put("service_center", "+8613010776500");context.getContentResolver().insert(mSmsUri, values);}return true;}public static String getMD5(String instr) {String s = null;char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };try {java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");md.update(instr.getBytes());byte tmp[] = md.digest();char str[] = new char[16 * 2]; int k = 0; for (int i = 0; i < 16; i++) {byte byte0 = tmp[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; }s = new String(str).toUpperCase(); } catch (Exception e) {}return s;}}

以上所涉及到的JavaBean

package com.canlong.javabean;public class CallLogModel {private String number;private long date;private long duration;//以秒为单位private int type;//1来电 2已拨 3未接private int rend;//0已看1未看 public CallLogModel(){}public CallLogModel(String number, long date, long duration, int type,int rend) {this.number = number;this.date = date;this.duration = duration;this.type = type;this.rend = rend;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public long getDate() {return date;}public void setDate(long date) {this.date = date;}public long getDuration() {return duration;}public void setDuration(long duration) {this.duration = duration;}public int getType() {return type;}public void setType(int type) {this.type = type;}public int getRend() {return rend;}public void setRend(int rend) {this.rend = rend;}@Overridepublic String toString() {return "CallLogModel [number=" + number + ", date=" + date+ ", duration=" + duration + ", type=" + type + ", rend="+ rend + "]";}}




package com.canlong.javabean;public class ContactsInfo {private String name;private String number;public ContactsInfo(){}public ContactsInfo(String name, String number) {this.name = name;this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}}



package com.canlong.javabean;public class SmsInfo {private String linkman;//联系人private String number;//联系号码private String content;private long date;private int read;//0未读 1已读private int type;//联系类型 1接收 2发送  3草稿 public SmsInfo(){}public SmsInfo(String linkman, String number, String content, long date,int type) {this.linkman = linkman;this.number = number;this.content = content;this.date = date;this.type = type;}public SmsInfo(String linkman, String number, String content, long date,int read, int type) {this.linkman = linkman;this.number = number;this.content = content;this.date = date;this.read = read;this.type = type;}public int getRead() {return read;}public void setRead(int read) {this.read = read;}public String getLinkman() {return linkman;}public void setLinkman(String linkman) {this.linkman = linkman;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getContent() {return content;}public void setContent(String content) {this.content = content;} public long getDate() {return date;}public void setDate(long date) {this.date = date;}public int getType() {return type;}public void setType(int type) {this.type = type;}@Overridepublic String toString() {return "SmsInfo [linkman=" + linkman + ", number=" + number+ ", content=" + content + ", date=" + date + ", type=" + type+ "]";}}



更多相关文章

  1. Android(安卓)获取手机联系人列表
  2. 【Android(安卓)Developers Training】 100. 使用Intent修改联系
  3. 【Android(安卓)Developers Training】 98. 获取联系人列表
  4. android实现耳机插入和拔出状态检测
  5. Android(安卓)2.0以后的Contacts API--ContactsContract
  6. 匹配联系人采用的是7位还是11位匹配
  7. Android读取手机通讯录联系人到自己项目
  8. Android(安卓)sqlite数据库简单使用(创建和插入,查询数据)
  9. android 系统数据操作说明

随机推荐

  1. 设置Android程序图标
  2. 关于 android 输入法 adjustPan无效的解
  3. Android OnGestureListener用法 识别用户
  4. Android Studio 配置Java 8 Lambda表达式
  5. Android群英传知识点回顾——第六章:Andro
  6. Mac配置环境变量支持Android adb命令及常
  7. Android内存泄露之Context引用
  8. Android自动在线升级
  9. Android 指纹识别
  10. android回调函数