android 浏览普通彩信列表核心源码
来源:互联网 发布:对接公众号源码 编辑:程序博客网 时间:2024/06/05 05:17
Activity 内容:
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import android.database.Cursor;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.net.Uri;
- import android.os.Bundle;
- import android.provider.Contacts;
- import android.util.Log;
- import android.view.View;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- /**
- * @author mpqi 2012
- */
- @SuppressWarnings("deprecation")
- public class SmsPage extends Activity{
- private final String TAG="SmsPage";
- private final Uri CONTENT_URI = Uri.parse("content://mms/inbox"); //查询彩信收件箱
- private final Uri CONTENT_URI_PART = Uri.parse("content://mms/part"); //彩信附件表
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- LinearLayout linearLayout = (LinearLayout) findViewById(R.id.content1);
- Cursor cursor = getContentResolver().query(CONTENT_URI, null, null,null, null);
- String name = "";
- while (cursor.moveToNext()) {
- LinearLayout view = (LinearLayout) View.inflate(this, R.layout.smsitem_mms, null);
- TextView address = (TextView)view.findViewById(R.id.sms_address);
- TextView body = (TextView)view.findViewById(R.id.sms_body);
- TextView date = (TextView)view.findViewById(R.id.sms_date);
- TextView sub = (TextView)view.findViewById(R.id.sms_sub);
- ImageView image = (ImageView)view.findViewById(R.id.sms_image);
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date time=new Date(cursor.getLong(cursor.getColumnIndex("date"))*1000);//彩信时间
- int id = cursor.getInt(cursor.getColumnIndex("_id"));//彩信Id
- String subject = cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
- Cursor cAdd =null;
- Cursor cPhones=null;
- Cursor cPeople=null;
- Cursor cPart=null;
- try {
- //根据彩信id从addr表中查出发送人电话号码,其中外键msg_id映射pdu表的id;
- String selectionAdd = new String("msg_id=" + id );
- Uri uriAddr = 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条记录,第一条记录为发件人号码,第二条为本机号码
- String number= cAdd.getString(cAdd.getColumnIndex("address"));
- cPhones = getContentResolver().query(Contacts.Phones.CONTENT_URI, new String[]{Contacts.Phones.PERSON_ID},Contacts.Phones.NUMBER +"=?",new String[]{number}, null);
- if(cPhones.getCount()>0){//根据phones表中的PERSON_ID查出 people 表中联系人的名字
- while (cPhones.moveToNext()) {
- String pId = cPhones.getString(cPhones.getColumnIndex(Contacts.Phones.PERSON_ID));
- Uri uriPeo = Uri.parse(Contacts.People.CONTENT_URI+"/"+pId);
- cPeople = getContentResolver().query(uriPeo, null,null,null, null);
- if(cPeople.getCount()>0){
- String str="";
- 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查询彩信的附件
- String selectionPart = new String("mid="+id);//part表中的mid外键为pdu表中的_id
- cPart = getContentResolver().query(CONTENT_URI_PART, null,selectionPart,null, null);
- String bodyStr="";
- String[] coloumns = null;
- String[] values = null;
- while(cPart.moveToNext()){
- coloumns = cPart.getColumnNames();
- if(values == null)
- values = new String[coloumns.length];
- for(int i=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);
- }else if(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(new String(subject.getBytes("iso-8859-1"),"UTF-8"));//设置彩信主题的编码格式
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
- if(!"".equals(bodyStr)){
- body.setText(bodyStr);
- }
- address.setText(name);
- date.setText(format.format(time));
- } catch (RuntimeException e) {
- 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);
- }
- }
- private String getMmsText(String _id){ //读取文本附件
- Uri partURI = Uri.parse("content://mms/part/" + _id );
- InputStream is = null;
- StringBuilder sb = new StringBuilder();
- try {
- is = getContentResolver().openInputStream(partURI);
- if(is!=null){
- BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
- String temp = reader.readLine();
- while (temp != null) {
- sb.append(temp);
- temp=reader.readLine();//在网上看到很多把InputStream转成string的文章,没有这关键的一句,几乎千遍一律的复制粘贴,该处如果不加上这句的话是会内存溢出的
- }
- }
- }catch (IOException e) {
- e.printStackTrace();
- Log.v(TAG, "读取附件异常"+e.getMessage());
- }finally{
- if (is != null){
- try {
- is.close();
- }catch (IOException e){
- Log.v(TAG, "读取附件异常"+e.getMessage());
- }
- }
- }
- return sb.toString();
- }
- private Bitmap getMmsImage(String _id){ //读取图片附件
- Uri partURI = Uri.parse("content://mms/part/" + _id );
- //ByteArrayOutputStream baos = new ByteArrayOutputStream();
- InputStream is = null;
- Bitmap bitmap=null;
- try {
- is = getContentResolver().openInputStream(partURI);
- //byte[] buffer = new byte[256];
- //int len = -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 (IOException e) {
- e.printStackTrace();
- Log.v(TAG, "读取图片异常"+e.getMessage());
- }finally{
- if (is != null){
- try {
- is.close();
- }catch (IOException e){
- Log.v(TAG, "读取图片异常"+e.getMessage());
- }
- }
- }
- return bitmap;
- }
- }
- android 浏览普通彩信列表核心源码
- Android源码分析--彩信
- Android源码分析--彩信
- android彩信Mms源码剖析
- 在线浏览android源码
- android源码浏览网址
- Android 源码浏览网站
- Android图片浏览源码解读
- android源码在线浏览网址
- android源码在线浏览网站
- 在线浏览android源码网站
- android在线源码浏览网站
- android源码在线浏览网站
- android源码在线浏览网站
- android 彩信
- android 普通蓝牙源码解读
- android源码发送彩信(不用调用系统界面)
- android短彩信数据库设计源码解析(一)
- PostMessage与SendMessage的迥异
- 更多的多线程学心得
- ASP.NET服务器控件
- 千里之行始于足下
- SAX解析XML文档
- android 浏览普通彩信列表核心源码
- POJ 3249 Test for Job(拓扑排序)
- MAC下Myeclipse SVN插件安装
- 远程注入DLL
- openstack+xen,使用glance命令镜像的下载和上传
- 【hdu】 Toy Storage 几何
- uva-729 - The Hamming Distance Problem-全排列
- 线性学习器-----最小二乘法 Rosenblatt感知机 delta法则
- 如何联机调试和发布程序(99$)