Android手机通讯录
本项目主要对手机的联系人进行分组、添加、删除、修改等操作,并将数据存到数据库。可通过拍照或者从手机中选中已存在的图片,并进行裁剪作为联系人的头像。可对联系人打电话、发短信、发邮件等操作。 并且可以同步本机联系人以及导入SIM卡的联系人信息。 附上源码: 下载文件 点击这里下载文件 本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962417,如需转载请自行联系原作者
MTK和高通的都应该怎么识别?
这里困扰了很多的开发者,这一篇可能都是错的,希望能提供参考。
try { Class<?> smsManagerClass = null; Class[] divideMessagePamas = { String.class }; Class[] sendMultipartTextMessagePamas = { String.class,String.class, ArrayList.class, ArrayList.class,ArrayList.class, int.class }; Method divideMessage = null; Method sendMultipartTextMessage = null; smsManagerClass = Class.forName("android.telephony.SmsManager"); Method method = smsManagerClass.getMethod("getDefault", new Class[]{}); Object smsManager = method.invoke(smsManagerClass, new Object[]{}); divideMessage = smsManagerClass.getMethod("divideMessage",divideMessagePamas); sendMultipartTextMessage = smsManagerClass.getMethod("sendMultipartTextMessage", sendMultipartTextMessagePamas); ArrayList<String> magArray = (ArrayList<String>) divideMessage.invoke(smsManager, content); sendMultipartTextMessage.invoke(smsManager,phone, "", magArray, null, null,phoneType); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); }
通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的。phoneType获取方法,iTelephony.getActivePhoneType();//1=GSM,2=CDMA
判断手机是否为双卡:
public static void initIsDoubleTelephone(Context context){ boolean isDouble = true; Method method = null; Object result_0 = null; Object result_1 = null; TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { //只要在反射getSimStateGemini 这个函数时报了错就是单卡手机(这是我自己的经验,不一定全正确) method = TelephonyManager.class.getMethod("getSimStateGemini",new Class[] { int.class }); //获取SIM卡1 result_0 = method.invoke(tm, new Object[] { new Integer(0) }); //获取SIM卡1 result_1 = method.invoke(tm, new Object[] { new Integer(1) }); } catch (SecurityException e) { isDouble = false; e.printStackTrace(); //System.out.println("1_ISSINGLETELEPHONE:"+e.toString()); } catch (NoSuchMethodException e) { isDouble = false; e.printStackTrace(); //System.out.println("2_ISSINGLETELEPHONE:"+e.toString()); } catch (IllegalArgumentException e) { isDouble = false; e.printStackTrace(); } catch (IllegalAccessException e) { isDouble = false; e.printStackTrace(); } catch (InvocationTargetException e) { isDouble = false; e.printStackTrace(); } catch (Exception e){ isDouble = false; e.printStackTrace(); //System.out.println("3_ISSINGLETELEPHONE:"+e.toString()); } SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); Editor editor = sp.edit(); if(isDouble){ //保存为双卡手机 editor.putBoolean(ISDOUBLE, true); //保存双卡是否可用 //如下判断哪个卡可用.双卡都可以用 if(result_0.toString().equals("5") && result_1.toString().equals("5")){ if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){ editor.putString(SIMCARD, "0"); } editor.putBoolean(SIMCARD_1, true); editor.putBoolean(SIMCARD_2, true); } else if(!result_0.toString().equals("5") && result_1.toString().equals("5")){//卡二可用 if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){ editor.putString(SIMCARD, "1"); } editor.putBoolean(SIMCARD_1, false); editor.putBoolean(SIMCARD_2, true); } else if(result_0.toString().equals("5") && !result_1.toString().equals("5")){//卡一可用 if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){ editor.putString(SIMCARD, "0"); } editor.putBoolean(SIMCARD_1, true); editor.putBoolean(SIMCARD_2, false); } else {//两个卡都不可用(飞行模式会出现这种种情况) editor.putBoolean(SIMCARD_1, false); editor.putBoolean(SIMCARD_2, false); } }else{ //保存为单卡手机 editor.putString(SIMCARD, "0"); editor.putBoolean(ISDOUBLE, false); } editor.commit(); }
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。
Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。