android 浏览普通彩信列表核心源码
16lz
2021-01-23
Activity 内容:
Java代码- importjava.io.BufferedReader;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.InputStreamReader;
- importjava.io.UnsupportedEncodingException;
- importjava.text.SimpleDateFormat;
- importjava.util.Date;
- importandroid.database.Cursor;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.net.Uri;
- importandroid.os.Bundle;
- importandroid.provider.Contacts;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.widget.ImageView;
- importandroid.widget.LinearLayout;
- importandroid.widget.TextView;
- /**
- *@authormpqi2012
- */
- @SuppressWarnings("deprecation")
- publicclassSmsPageextendsActivity{
- privatefinalStringTAG="SmsPage";
- privatefinalUriCONTENT_URI=Uri.parse("content://mms/inbox");//查询彩信收件箱
- privatefinalUriCONTENT_URI_PART=Uri.parse("content://mms/part");//彩信附件表
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- LinearLayoutlinearLayout=(LinearLayout)findViewById(R.id.content1);
- Cursorcursor=getContentResolver().query(CONTENT_URI,null,null,null,null);
- Stringname="";
- while(cursor.moveToNext()){
- LinearLayoutview=(LinearLayout)View.inflate(this,R.layout.smsitem_mms,null);
- TextViewaddress=(TextView)view.findViewById(R.id.sms_address);
- TextViewbody=(TextView)view.findViewById(R.id.sms_body);
- TextViewdate=(TextView)view.findViewById(R.id.sms_date);
- TextViewsub=(TextView)view.findViewById(R.id.sms_sub);
- ImageViewimage=(ImageView)view.findViewById(R.id.sms_image);
- SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
- Datetime=newDate(cursor.getLong(cursor.getColumnIndex("date"))*1000);//彩信时间
- intid=cursor.getInt(cursor.getColumnIndex("_id"));//彩信Id
- Stringsubject=cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
- CursorcAdd=null;
- CursorcPhones=null;
- CursorcPeople=null;
- CursorcPart=null;
- try{
- //根据彩信id从addr表中查出发送人电话号码,其中外键msg_id映射pdu表的id;
- StringselectionAdd=newString("msg_id="+id);
- UriuriAddr=Uri.parse("content://mms/"+id+"/addr");
- cAdd=getContentResolver().query(uriAddr,null,selectionAdd,null,null);
- //根据addr表中的电话号码在phones表中查出PERSON_ID,外键PERSON_ID映射people表中的_id
- if(cAdd.moveToFirst()){//该处会得到2条记录,第一条记录为发件人号码,第二条为本机号码
- Stringnumber=cAdd.getString(cAdd.getColumnIndex("address"));
- cPhones=getContentResolver().query(Contacts.Phones.CONTENT_URI,newString[]{Contacts.Phones.PERSON_ID},Contacts.Phones.NUMBER+"=?",newString[]{number},null);
- if(cPhones.getCount()>0){//根据phones表中的PERSON_ID查出people表中联系人的名字
- while(cPhones.moveToNext()){
- StringpId=cPhones.getString(cPhones.getColumnIndex(Contacts.Phones.PERSON_ID));
- UriuriPeo=Uri.parse(Contacts.People.CONTENT_URI+"/"+pId);
- cPeople=getContentResolver().query(uriPeo,null,null,null,null);
- if(cPeople.getCount()>0){
- Stringstr="";
- while(cPeople.moveToNext()){
- if(str==""){
- str=cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
- }else{
- str+=","+cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
- }
- }
- name=number+"/"+str;//如果通讯录中存在,则以‘电话号码/名字’形式显示
- }else{
- name=number;//如果是陌生人直接显示电话号码
- }
- }
- }else{
- name=number;//如果是陌生人直接显示电话号码
- }
- }
- //根据彩信ID查询彩信的附件
- StringselectionPart=newString("mid="+id);//part表中的mid外键为pdu表中的_id
- cPart=getContentResolver().query(CONTENT_URI_PART,null,selectionPart,null,null);
- StringbodyStr="";
- String[]coloumns=null;
- String[]values=null;
- while(cPart.moveToNext()){
- coloumns=cPart.getColumnNames();
- if(values==null)
- values=newString[coloumns.length];
- for(inti=0;i<cPart.getColumnCount();i++){
- values[i]=cPart.getString(i);
- }
- 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")){//判断附件类型
- image.setImageBitmap(getMmsImage(values[0]));//该处只会显示一张图片,如果有需求的朋友可以根据自己的需求将ImageView换成Gallery,修改一下方法
- image.setVisibility(View.VISIBLE);
- }elseif(values[3].equals("text/plain")){
- /**该处详细描述一下
- *发现一个版本问题,之前用的2.1版本的多台手机测试通过,结果用1.6的G2报异常
- *经过调试发现,1.6版本part表中根本就没有"text"列,也就是values[13],所以就
- *报错了,好像在1.6版本(我只测过G2,嘿嘿),就算是文本信息也是以一个附件形
- *式存在_date里面也就是values[12]里面,与图片类似,但在2.1里面却不是这样存
- *的,文本信息被存在了"text"这个字段中,且"_date"为null*/
- if(values[12]!=null){//所以该处需判断一下,如果_date为null,可直接设置内容为"text"
- bodyStr=getMmsText(values[0]);
- }else{
- bodyStr=values[13];
- }
- }
- }
- if(!"".equals(subject)&&subject!=null){
- try{
- sub.setText(newString(subject.getBytes("iso-8859-1"),"UTF-8"));//设置彩信主题的编码格式
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }
- }
- if(!"".equals(bodyStr)){
- body.setText(bodyStr);
- }
- address.setText(name);
- date.setText(format.format(time));
- }catch(RuntimeExceptione){
- Log.e(TAG,e.getMessage());
- }finally{
- if(cAdd!=null){
- cAdd.close();
- }
- if(cPart!=null){
- cPart.close();
- }
- if(cPeople!=null){
- cPeople.close();
- }
- if(cPhones!=null){
- cPhones.close();
- }
- }
- linearLayout.addView(view);
- }
- }
- privateStringgetMmsText(String_id){//读取文本附件
- UripartURI=Uri.parse("content://mms/part/"+_id);
- InputStreamis=null;
- StringBuildersb=newStringBuilder();
- try{
- is=getContentResolver().openInputStream(partURI);
- if(is!=null){
- BufferedReaderreader=newBufferedReader(newInputStreamReader(is,"UTF-8"));
- Stringtemp=reader.readLine();
- while(temp!=null){
- sb.append(temp);
- temp=reader.readLine();//在网上看到很多把InputStream转成string的文章,没有这关键的一句,几乎千遍一律的复制粘贴,该处如果不加上这句的话是会内存溢出的
- }
- }
- }catch(IOExceptione){
- e.printStackTrace();
- Log.v(TAG,"读取附件异常"+e.getMessage());
- }finally{
- if(is!=null){
- try{
- is.close();
- }catch(IOExceptione){
- Log.v(TAG,"读取附件异常"+e.getMessage());
- }
- }
- }
- returnsb.toString();
- }
- privateBitmapgetMmsImage(String_id){//读取图片附件
- UripartURI=Uri.parse("content://mms/part/"+_id);
- //ByteArrayOutputStreambaos=newByteArrayOutputStream();
- InputStreamis=null;
- Bitmapbitmap=null;
- try{
- is=getContentResolver().openInputStream(partURI);
- //byte[]buffer=newbyte[256];
- //intlen=-1;
- //while((len=is.read(buffer))!=-1){
- //baos.write(buffer,0,len);
- //}
- //bitmap=BitmapFactory.decodeByteArray(baos.toByteArray(),0,baos.toByteArray().length);
- bitmap=BitmapFactory.decodeStream(is);
- }catch(IOExceptione){
- e.printStackTrace();
- Log.v(TAG,"读取图片异常"+e.getMessage());
- }finally{
- if(is!=null){
- try{
- is.close();
- }catch(IOExceptione){
- Log.v(TAG,"读取图片异常"+e.getMessage());
- }
- }
- }
- returnbitmap;
- }
- }
更多相关文章
- Android下实现电话号码归属地的查询
- android 中EditView输入电话号码(3+4+4格式)
- Widnows 作为 Android USB 附件的实现
- android实现发送Email功能(从相册中选择图片作为附件)
- Android中发送短信和彩信
- Android 拦截修改电话号码
- android 发送短信,彩信,邮件代码
- Android根据电话号码取得联系人姓名及头像
- Android通过intent发送彩信