在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" />
分享到:
相关推荐
在Android 2.2中,为了能够发送彩信,应用程序需要在`AndroidManifest.xml`中声明相应的权限: ```xml <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android....
在Android平台上,浏览普通彩信列表的实现是一个关键功能,特别是在开发涉及通信或者消息传递的应用时。本示例的核心在于如何有效地展示并管理彩信(MMS)数据,让用户能够像浏览短信(SMS)一样方便地查看彩信列表...
在AndroidManifest.xml文件中,我们需要添加必要的权限,如`<uses-permission android:name="android.permission.SEND_MMS" />`和`<uses-permission android:name="android.permission.RECEIVE_MMS" />`,以及读写...
在Android平台上,管理和操作数据库是常见的任务之一,特别是在涉及到用户数据存储时,如短信和彩信。本知识点将深入探讨如何向Android系统的...理解并掌握这一过程,对于开发涉及通信功能的Android应用至关重要。
本文将深入探讨如何在Android中插入彩信到其数据库,以及如何新建和导入彩信的相关知识点。 首先,理解Android中的MMS机制是至关重要的。Android系统通过ContentProvider接口与多媒体消息数据库交互,这个接口使得...
在Android系统中,短信(SMS)和彩信(MMS)都是重要的通信手段。其中短信主要用于纯文本信息的发送与接收,而彩信则支持包括图像、音频、视频等多种形式的媒体内容。 - **短信**(SMS): Short Message Service,即短...
在Android系统中,彩信(Multimedia Messaging Service,MMS)是一种常见的用于发送多媒体内容,如图片、音频和视频的通信方式。然而,在特定版本的Android系统中,尤其是在Android 4.3版本,用户可能会遇到一个问题...
在Android平台上,点对点(P2P)通信是一种常见的技术,它允许设备之间直接交换数据,无需通过中央服务器。...这对于开发聊天应用、文件分享应用或者其他需要直接设备间交互的Android应用来说是非常有价值的参考资料。
在Android应用中,UI设计是直接影响用户体验的关键部分。源码中的布局文件(XML)展示了如何使用Android的View组件创建各种交互界面,如消息列表、新建消息界面等。同时,通过Activity和Fragment的使用,我们可以...
在这个特定的案例中,我们可以从源码中学习到如何在Android环境中实现短信和彩信的应用功能。 首先,我们要了解Android系统的短信服务是基于Android提供的SmsManager类,它允许应用程序发送和接收短信。在源码中,...
在Android中,这些权限通常在Manifest.xml文件中声明,如`READ_SMS`和`WRITE_SMS`。 5. **性能优化**:处理大量彩信数据可能会影响应用性能,因此需要优化数据读取策略,比如批量读取、缓存机制和后台线程处理。 6...
在Android应用开发中,"后台彩信发送"是一项重要的功能,尤其对于那些需要自动化或无声息地传递多媒体信息的应用来说。后台发送彩信(Multimedia Messaging Service, MMS)允许程序在用户无感知的情况下发送包含图片...
在安卓平台上,短信和彩信(MMS)的管理和交互是移动应用开发中常见的功能,尤其是在消息类应用或者服务通知中。本资源“安卓短信彩信相关-android模拟短信插入和接收.rar”提供了一些关于如何在Android环境中模拟...
这通常涉及到在`build.gradle`文件中添加依赖,并同步项目。云之讯提供了详细的SDK文档,指导开发者如何配置和使用。在集成SDK后,我们需要在AndroidManifest.xml中添加必要的权限,例如读写短信权限、互联网权限等...
在恢复备份时,源码可能包含了反向操作,将备份文件中的数据重新导入到系统数据库中。这需要解析备份文件格式,可能是一个CSV文件或者自定义的二进制格式。在导入过程中,系统可能需要处理并发问题,确保数据的正确...
这需要在`AndroidManifest.xml`文件中声明`READ_SMS`和`SEND_SMS`权限,并在运行时通过` ActivityCompat.requestPermissions()`方法来请求用户的许可。 1. **读取短信**: 要读取设备上的短信,我们需要使用`...
总之,这个压缩包为学习如何在Android应用中实现自动填充短信验证码提供了一个起点,但实际应用时可能需要根据具体情况调整和优化。通过研究源码,开发者可以更深入地理解Android的广播机制和自动填充服务,提升自己...
【标题】"安卓短信彩信相关相关-Android项目开发实战短信验证码自动填写源码.zip" 涉及的是Android应用程序开发中的一个重要环节——短信验证码自动填充功能。在现代移动应用中,尤其是涉及到用户账户安全的注册或...
对于短信拦截,应用需要在`AndroidManifest.xml`文件中声明`READ_SMS`和`WRITE_SMS`权限。`READ_SMS`允许读取手机中的所有短信,而`WRITE_SMS`则允许写入和删除短信。这两个权限是实现短信拦截的基础。 其次,短信...
为了在QQ通讯录之前拦截短信,我们需要创建一个自定义的BroadcastReceiver,并在AndroidManifest.xml文件中注册它。这个BroadcastReceiver需要监听SMS_RECEIVED行动,这是系统发出短信到达的通知。在...