android经常使用的电话操作[通俗易懂]

android经常使用的电话操作

大家好,又见面了,我是全栈君。

给大家分享一下我的一个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中的数据库ID Cursor 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运行一个空值插入,目的是获取系统返回的rawContactId ContentValues 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.html ArrayList<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; } @Override public 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; } @Override public String toString() { return "SmsInfo [linkman=" + linkman + ", number=" + number + ", content=" + content + ", date=" + date + ", type=" + type + "]"; } } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116025.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 两种通用型测试用例模板(excel/xmind)

    两种通用型测试用例模板(excel/xmind)测试用例模板一、针对大版本需求的测试用例模板1、测试用例模板说明1.1、表头说明 xxx项目V1.0版本-测试用例(示范标题)             (最有料信息科技有限公司测试组/ONLYFORINTERNALUSEONLY)      

  • goland2021.4激活码_通用破解码

    goland2021.4激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 联想笔记本键盘亮屏幕不亮_笔记本电脑进入睡眠状态后无法通过鼠标或键盘来唤醒屏幕怎么解决…「建议收藏」

    联想笔记本键盘亮屏幕不亮_笔记本电脑进入睡眠状态后无法通过鼠标或键盘来唤醒屏幕怎么解决…「建议收藏」‍通常情况下,我们如果有一段时间没有使用笔记本电脑,那么笔记本会自动进入睡眠状态。有用户发现笔记本电脑进入睡眠状态后无法通过鼠标或键盘来唤醒屏幕,那么应该怎么解决这个问题呢?大家可以参考下面提供的方法看看能否解决。1、如果遇到睡眠不能唤醒的问题,可以点击笔记本上的电源按钮,有的机型是通过点击电源按钮来唤醒的;2、如果点开机键还是不能解决,可以查看硬盘指示灯,在睡眠状态下,硬盘灯是闪烁的;3、如果硬…

  • CSGO国内开箱网站大全incsgo skinsdog狗网 coolkaixiang 88steam「建议收藏」

    CSGO国内开箱网站大全incsgo skinsdog狗网 coolkaixiang 88steam「建议收藏」CSGO国内开箱网站大全收录incsgo官网,skinsdog狗网官网,coolkaixiang官网,88steam官网,Box818官网,Piggycase官网,Yskins官网incsgo国内CSGO饰品皮肤开箱网站官方链接:www.incsgo.gg注册登录自动免费获得$1.00美金取回状态:直接取回**优惠码:**csgogo(充值使用csgogo可增加5%充值金额)skinsdog狗网CSGO饰品皮肤开箱网站可直接取回官方链接:skinsdog.c.

  • duststorm和sandstorm_Stormwind

    duststorm和sandstorm_Stormwindvirustracker·2016/03/0310:17www.cylance.com/hubfs/2015_…CylanceSPEAR发现了一起针对日本、韩国、美国、欧洲以及其他几个东南亚国家的威胁行动,在上述国家中,有大量的行业部门都遭到了攻击。0x00多样的权利形式我们研究发现DustStorm最早从2010年开始活动,使用了大量不同的作战技术,包括钓鱼、水坑攻击和0-day漏洞。…

    2022年10月14日
  • 激活码2089(已测有效)

    激活码2089(已测有效),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号