Activity 内容:

Java代码 收藏代码
  1. importjava.io.BufferedReader;
  2. importjava.io.IOException;
  3. importjava.io.InputStream;
  4. importjava.io.InputStreamReader;
  5. importjava.io.UnsupportedEncodingException;
  6. importjava.text.SimpleDateFormat;
  7. importjava.util.Date;
  8. importandroid.database.Cursor;
  9. importandroid.graphics.Bitmap;
  10. importandroid.graphics.BitmapFactory;
  11. importandroid.net.Uri;
  12. importandroid.os.Bundle;
  13. importandroid.provider.Contacts;
  14. importandroid.util.Log;
  15. importandroid.view.View;
  16. importandroid.widget.ImageView;
  17. importandroid.widget.LinearLayout;
  18. importandroid.widget.TextView;
  19. /**
  20. *@authormpqi2012
  21. */
  22. @SuppressWarnings("deprecation")
  23. publicclassSmsPageextendsActivity{
  24. privatefinalStringTAG="SmsPage";
  25. privatefinalUriCONTENT_URI=Uri.parse("content://mms/inbox");//查询彩信收件箱
  26. privatefinalUriCONTENT_URI_PART=Uri.parse("content://mms/part");//彩信附件表
  27. publicvoidonCreate(BundlesavedInstanceState){
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.main);
  30. LinearLayoutlinearLayout=(LinearLayout)findViewById(R.id.content1);
  31. Cursorcursor=getContentResolver().query(CONTENT_URI,null,null,null,null);
  32. Stringname="";
  33. while(cursor.moveToNext()){
  34. LinearLayoutview=(LinearLayout)View.inflate(this,R.layout.smsitem_mms,null);
  35. TextViewaddress=(TextView)view.findViewById(R.id.sms_address);
  36. TextViewbody=(TextView)view.findViewById(R.id.sms_body);
  37. TextViewdate=(TextView)view.findViewById(R.id.sms_date);
  38. TextViewsub=(TextView)view.findViewById(R.id.sms_sub);
  39. ImageViewimage=(ImageView)view.findViewById(R.id.sms_image);
  40. SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
  41. Datetime=newDate(cursor.getLong(cursor.getColumnIndex("date"))*1000);//彩信时间
  42. intid=cursor.getInt(cursor.getColumnIndex("_id"));//彩信Id
  43. Stringsubject=cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
  44. CursorcAdd=null;
  45. CursorcPhones=null;
  46. CursorcPeople=null;
  47. CursorcPart=null;
  48. try{
  49. //根据彩信id从addr表中查出发送人电话号码,其中外键msg_id映射pdu表的id;
  50. StringselectionAdd=newString("msg_id="+id);
  51. UriuriAddr=Uri.parse("content://mms/"+id+"/addr");
  52. cAdd=getContentResolver().query(uriAddr,null,selectionAdd,null,null);
  53. //根据addr表中的电话号码在phones表中查出PERSON_ID,外键PERSON_ID映射people表中的_id
  54. if(cAdd.moveToFirst()){//该处会得到2条记录,第一条记录为发件人号码,第二条为本机号码
  55. Stringnumber=cAdd.getString(cAdd.getColumnIndex("address"));
  56. cPhones=getContentResolver().query(Contacts.Phones.CONTENT_URI,newString[]{Contacts.Phones.PERSON_ID},Contacts.Phones.NUMBER+"=?",newString[]{number},null);
  57. if(cPhones.getCount()>0){//根据phones表中的PERSON_ID查出people表中联系人的名字
  58. while(cPhones.moveToNext()){
  59. StringpId=cPhones.getString(cPhones.getColumnIndex(Contacts.Phones.PERSON_ID));
  60. UriuriPeo=Uri.parse(Contacts.People.CONTENT_URI+"/"+pId);
  61. cPeople=getContentResolver().query(uriPeo,null,null,null,null);
  62. if(cPeople.getCount()>0){
  63. Stringstr="";
  64. while(cPeople.moveToNext()){
  65. if(str==""){
  66. str=cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
  67. }else{
  68. str+=","+cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
  69. }
  70. }
  71. name=number+"/"+str;//如果通讯录中存在,则以‘电话号码/名字’形式显示
  72. }else{
  73. name=number;//如果是陌生人直接显示电话号码
  74. }
  75. }
  76. }else{
  77. name=number;//如果是陌生人直接显示电话号码
  78. }
  79. }
  80. //根据彩信ID查询彩信的附件
  81. StringselectionPart=newString("mid="+id);//part表中的mid外键为pdu表中的_id
  82. cPart=getContentResolver().query(CONTENT_URI_PART,null,selectionPart,null,null);
  83. StringbodyStr="";
  84. String[]coloumns=null;
  85. String[]values=null;
  86. while(cPart.moveToNext()){
  87. coloumns=cPart.getColumnNames();
  88. if(values==null)
  89. values=newString[coloumns.length];
  90. for(inti=0;i<cPart.getColumnCount();i++){
  91. values[i]=cPart.getString(i);
  92. }
  93. if(values[3].equals("image/jpeg")||values[3].equals("image/bmp")||values[3].equals("image/gif")||values[3].equals("image/jpg")||values[3].equals("image/png")){//判断附件类型
  94. image.setImageBitmap(getMmsImage(values[0]));//该处只会显示一张图片,如果有需求的朋友可以根据自己的需求将ImageView换成Gallery,修改一下方法
  95. image.setVisibility(View.VISIBLE);
  96. }elseif(values[3].equals("text/plain")){
  97. /**该处详细描述一下
  98. *发现一个版本问题,之前用的2.1版本的多台手机测试通过,结果用1.6的G2报异常
  99. *经过调试发现,1.6版本part表中根本就没有"text"列,也就是values[13],所以就
  100. *报错了,好像在1.6版本(我只测过G2,嘿嘿),就算是文本信息也是以一个附件形
  101. *式存在_date里面也就是values[12]里面,与图片类似,但在2.1里面却不是这样存
  102. *的,文本信息被存在了"text"这个字段中,且"_date"为null*/
  103. if(values[12]!=null){//所以该处需判断一下,如果_date为null,可直接设置内容为"text"
  104. bodyStr=getMmsText(values[0]);
  105. }else{
  106. bodyStr=values[13];
  107. }
  108. }
  109. }
  110. if(!"".equals(subject)&&subject!=null){
  111. try{
  112. sub.setText(newString(subject.getBytes("iso-8859-1"),"UTF-8"));//设置彩信主题的编码格式
  113. }catch(UnsupportedEncodingExceptione){
  114. e.printStackTrace();
  115. }
  116. }
  117. if(!"".equals(bodyStr)){
  118. body.setText(bodyStr);
  119. }
  120. address.setText(name);
  121. date.setText(format.format(time));
  122. }catch(RuntimeExceptione){
  123. Log.e(TAG,e.getMessage());
  124. }finally{
  125. if(cAdd!=null){
  126. cAdd.close();
  127. }
  128. if(cPart!=null){
  129. cPart.close();
  130. }
  131. if(cPeople!=null){
  132. cPeople.close();
  133. }
  134. if(cPhones!=null){
  135. cPhones.close();
  136. }
  137. }
  138. linearLayout.addView(view);
  139. }
  140. }
  141. privateStringgetMmsText(String_id){//读取文本附件
  142. UripartURI=Uri.parse("content://mms/part/"+_id);
  143. InputStreamis=null;
  144. StringBuildersb=newStringBuilder();
  145. try{
  146. is=getContentResolver().openInputStream(partURI);
  147. if(is!=null){
  148. BufferedReaderreader=newBufferedReader(newInputStreamReader(is,"UTF-8"));
  149. Stringtemp=reader.readLine();
  150. while(temp!=null){
  151. sb.append(temp);
  152. temp=reader.readLine();//在网上看到很多把InputStream转成string的文章,没有这关键的一句,几乎千遍一律的复制粘贴,该处如果不加上这句的话是会内存溢出的
  153. }
  154. }
  155. }catch(IOExceptione){
  156. e.printStackTrace();
  157. Log.v(TAG,"读取附件异常"+e.getMessage());
  158. }finally{
  159. if(is!=null){
  160. try{
  161. is.close();
  162. }catch(IOExceptione){
  163. Log.v(TAG,"读取附件异常"+e.getMessage());
  164. }
  165. }
  166. }
  167. returnsb.toString();
  168. }
  169. privateBitmapgetMmsImage(String_id){//读取图片附件
  170. UripartURI=Uri.parse("content://mms/part/"+_id);
  171. //ByteArrayOutputStreambaos=newByteArrayOutputStream();
  172. InputStreamis=null;
  173. Bitmapbitmap=null;
  174. try{
  175. is=getContentResolver().openInputStream(partURI);
  176. //byte[]buffer=newbyte[256];
  177. //intlen=-1;
  178. //while((len=is.read(buffer))!=-1){
  179. //baos.write(buffer,0,len);
  180. //}
  181. //bitmap=BitmapFactory.decodeByteArray(baos.toByteArray(),0,baos.toByteArray().length);
  182. bitmap=BitmapFactory.decodeStream(is);
  183. }catch(IOExceptione){
  184. e.printStackTrace();
  185. Log.v(TAG,"读取图片异常"+e.getMessage());
  186. }finally{
  187. if(is!=null){
  188. try{
  189. is.close();
  190. }catch(IOExceptione){
  191. Log.v(TAG,"读取图片异常"+e.getMessage());
  192. }
  193. }
  194. }
  195. returnbitmap;
  196. }
  197. }


更多相关文章

  1. Android下实现电话号码归属地的查询
  2. android 中EditView输入电话号码(3+4+4格式)
  3. Widnows 作为 Android USB 附件的实现
  4. android实现发送Email功能(从相册中选择图片作为附件)
  5. Android中发送短信和彩信
  6. Android 拦截修改电话号码
  7. android 发送短信,彩信,邮件代码
  8. Android根据电话号码取得联系人姓名及头像
  9. Android通过intent发送彩信

随机推荐

  1. php分支与循环 、php与html混编学习
  2. 刚才看到一个P身份證的楼主P出来假的不得
  3. 单文件上传与多文件上传,简单分页操作的
  4. 属性和方法重载及命名空间与类自动加载器
  5. 实例演示字符串函数
  6. MySQL主从复制配置
  7. Android(安卓)Studio常用设置
  8. Android音乐播放器(一):搜索手机存储的音乐
  9. Android常用的intent action汇总
  10. Android(安卓)TextView前加图标垂直居中