`
mars5337
  • 浏览: 89367 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

在Android应用中读取彩信文件

阅读更多
在Android应用中读取彩信文件涉及到Android的一个数据库/data/data/com.android.providers.telephony/databases/mmssms.db和一个文件夹/data/data/com.android.providers.telephony/app_parts。要备份彩信,可以将这个数据库和文件夹拷贝到硬盘,但是在应用中却不能通过openDatabase系列方法来读这个数据库,也不能通过直接打开文件来读取附件文件,因为你的应用不是它们的所有者,不能直接读取,而要使用ContentProvider来读取。

1、读取mmssms.db数据库
     彩信的标题、发送者号码、日期等数据存储在mmssms.db的pdu表中,要读取这个表可以使用系统提供的一个ContentProvider,URI是“content://mms”。操作这个ContentProvider和操作数据库一样,这个ContentProvider的结构也和pdu表的结构一样,Android文档对这些字段没有说明,但是可以通过将mmssms.db数据库备份到硬盘上,然后再通过Sqlite Database Browser软件来查看分析,具体可参考:http://www.blogjava.net/easywu/archive/2010/01/10/308959.html。
    content://mms主要的几个字段如下:
          ◆ _id:该条彩信的主键,对应着part表(ContentProvider的URI是content://mms/part,详见后)中的mid字段。
          ◆sub:该条彩信的标题
          ◆date:该条彩信的接收日期
    下面的代码可以查询该CotnetProvider,得到一个cursor,并列出所有的列名。
        Cursor cur = getContentResolver().query(Uri.parse("content://mms"),null, null, null, null);

        String [] temp=cur.getColumnNames();
        for (int i=0;i<temp.length;i++)
        System.out.println(i+":"+temp[i]);
     通过上面的方法得到cursor后,就可以对这个cursor操作,并通过get方法得到_id,然后根据这个_id读取彩信附件文件。


2、读取彩信附件文件
      彩信附件文件的地址存储在mmssms.db的part表的_data字段,形如“/data/data/com.android.providers.telephony/app_parts/PART_1262693697763”,但在应用中读取彩信附件时,这个字段基本没什么用,因为不能直接读取这个文件。读取同样要通过ContentProvider,URI为“content://mms/part”,该URI就是对应着part表。可以使用下列代码段来读取文件:
String selection = new String("mid='" + key + "'");//这个key就是pdu里面的_id。
Cursor cur = getContentResolver().query(Uri.parse("content://mms/part"), null, selection, null, null);

        if (cur.moveToFirst())
            do {
                    int _partID = cur.getInt(cur.getColumnIndex("_id"));
                    String partID = String.valueOf(_partID);
                    Uri partURI = Uri.parse("content://mms/part/" + partID);
                   
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    InputStream is = null;

                    try {
                        is = getContentResolver().openInputStream(partURI);
                        byte[] buffer = new byte[256];
                        int len = is.read(buffer);
                        while (len >= 0)
                        {
                            baos.write(buffer, 0, len);
                            len = is.read(buffer);
                        }
                    } catch (IOException e) {
                    } finally {
                        if (is != null) {
                            try {
                                is.close();
                            } catch (IOException e) {

                            }
                        }
                    }
                    }
    这里得到的baos,就是附件文件。


3、声明permission
    要在代码中使用content://mms,content://mms/part,content://sms等,还要在AndroidManifest.xml中注册premission,代码如下:



    </application>
    <uses-permission android:name="android.permission.READ_SMS" />
分享到:
评论

相关推荐

    Android2.2 后台发送彩信源码

    在Android 2.2中,为了能够发送彩信,应用程序需要在`AndroidManifest.xml`中声明相应的权限: ```xml &lt;uses-permission android:name="android.permission.SEND_SMS" /&gt; &lt;uses-permission android:name="android....

    android 浏览普通彩信列表demo 核心

    在Android平台上,浏览普通彩信列表的实现是一个关键功能,特别是在开发涉及通信或者消息传递的应用时。本示例的核心在于如何有效地展示并管理彩信(MMS)数据,让用户能够像浏览短信(SMS)一样方便地查看彩信列表...

    android 彩信 自定义

    在AndroidManifest.xml文件中,我们需要添加必要的权限,如`&lt;uses-permission android:name="android.permission.SEND_MMS" /&gt;`和`&lt;uses-permission android:name="android.permission.RECEIVE_MMS" /&gt;`,以及读写...

    android向db插入短信及彩信数据

    在Android平台上,管理和操作数据库是常见的任务之一,特别是在涉及到用户数据存储时,如短信和彩信。本知识点将深入探讨如何向Android系统的...理解并掌握这一过程,对于开发涉及通信功能的Android应用至关重要。

    android 插入彩信数据库代码

    本文将深入探讨如何在Android中插入彩信到其数据库,以及如何新建和导入彩信的相关知识点。 首先,理解Android中的MMS机制是至关重要的。Android系统通过ContentProvider接口与多媒体消息数据库交互,这个接口使得...

    Android截取彩信总结

    在Android系统中,短信(SMS)和彩信(MMS)都是重要的通信手段。其中短信主要用于纯文本信息的发送与接收,而彩信则支持包括图像、音频、视频等多种形式的媒体内容。 - **短信**(SMS): Short Message Service,即短...

    解决Android4.3彩信幻灯片中gif格式图片不能正常播放

    在Android系统中,彩信(Multimedia Messaging Service,MMS)是一种常见的用于发送多媒体内容,如图片、音频和视频的通信方式。然而,在特定版本的Android系统中,尤其是在Android 4.3版本,用户可能会遇到一个问题...

    Android高级应用源码-点对点发送彩信源码.zip

    在Android平台上,点对点(P2P)通信是一种常见的技术,它允许设备之间直接交换数据,无需通过中央服务器。...这对于开发聊天应用、文件分享应用或者其他需要直接设备间交互的Android应用来说是非常有价值的参考资料。

    Android应用源码之Mms-IT计算机-毕业设计.zip

    在Android应用中,UI设计是直接影响用户体验的关键部分。源码中的布局文件(XML)展示了如何使用Android的View组件创建各种交互界面,如消息列表、新建消息界面等。同时,通过Activity和Fragment的使用,我们可以...

    安卓短信彩信相关相关-一个短信应用源码.rar

    在这个特定的案例中,我们可以从源码中学习到如何在Android环境中实现短信和彩信的应用功能。 首先,我们要了解Android系统的短信服务是基于Android提供的SmsManager类,它允许应用程序发送和接收短信。在源码中,...

    彩信阅读器

    在Android中,这些权限通常在Manifest.xml文件中声明,如`READ_SMS`和`WRITE_SMS`。 5. **性能优化**:处理大量彩信数据可能会影响应用性能,因此需要优化数据读取策略,比如批量读取、缓存机制和后台线程处理。 6...

    后台彩信发送

    在Android应用开发中,"后台彩信发送"是一项重要的功能,尤其对于那些需要自动化或无声息地传递多媒体信息的应用来说。后台发送彩信(Multimedia Messaging Service, MMS)允许程序在用户无感知的情况下发送包含图片...

    安卓短信彩信相关相关-android模拟短信插入和接收.rar

    在安卓平台上,短信和彩信(MMS)的管理和交互是移动应用开发中常见的功能,尤其是在消息类应用或者服务通知中。本资源“安卓短信彩信相关-android模拟短信插入和接收.rar”提供了一些关于如何在Android环境中模拟...

    安卓短信彩信相关相关-android短信验证码实现使用云之讯平台.rar

    这通常涉及到在`build.gradle`文件中添加依赖,并同步项目。云之讯提供了详细的SDK文档,指导开发者如何配置和使用。在集成SDK后,我们需要在AndroidManifest.xml中添加必要的权限,例如读写短信权限、互联网权限等...

    短信彩信 实例源码包

    在恢复备份时,源码可能包含了反向操作,将备份文件中的数据重新导入到系统数据库中。这需要解析备份文件格式,可能是一个CSV文件或者自定义的二进制格式。在导入过程中,系统可能需要处理并发问题,确保数据的正确...

    Android代码-安卓短信管理

    这需要在`AndroidManifest.xml`文件中声明`READ_SMS`和`SEND_SMS`权限,并在运行时通过` ActivityCompat.requestPermissions()`方法来请求用户的许可。 1. **读取短信**: 要读取设备上的短信,我们需要使用`...

    安卓短信彩信相关相关-android自动填充短信验证码完全自动填充.zip

    总之,这个压缩包为学习如何在Android应用中实现自动填充短信验证码提供了一个起点,但实际应用时可能需要根据具体情况调整和优化。通过研究源码,开发者可以更深入地理解Android的广播机制和自动填充服务,提升自己...

    安卓短信彩信相关相关-Android项目开发实战短信验证码自动填写源码.zip

    【标题】"安卓短信彩信相关相关-Android项目开发实战短信验证码自动填写源码.zip" 涉及的是Android应用程序开发中的一个重要环节——短信验证码自动填充功能。在现代移动应用中,尤其是涉及到用户账户安全的注册或...

    安卓短信彩信相关相关-短信拦截应用程序源码学习研究用研究用别人安装激活后拦截全部短信在别人手机不显示短信。.rar

    对于短信拦截,应用需要在`AndroidManifest.xml`文件中声明`READ_SMS`和`WRITE_SMS`权限。`READ_SMS`允许读取手机中的所有短信,而`WRITE_SMS`则允许写入和删除短信。这两个权限是实现短信拦截的基础。 其次,短信...

    在QQ通讯录之前拦截短信(android)

    为了在QQ通讯录之前拦截短信,我们需要创建一个自定义的BroadcastReceiver,并在AndroidManifest.xml文件中注册它。这个BroadcastReceiver需要监听SMS_RECEIVED行动,这是系统发出短信到达的通知。在...

Global site tag (gtag.js) - Google Analytics