没有合适的资源?快使用搜索试试~ 我知道了~
主要讲述了Android如何管理短信 彩信,如何写代码实现拦截彩信,获取彩信的附件图片等等
资源推荐
资源详情
资源评论
短信:SMS:Short Message Service 手机短信服务;
彩信:MMS:Mulmedia Messaging Service 的缩写,中文译为多媒体短信服务,即彩信;
下边是 Android OS 中短信和彩信的管理
文 件 /data/data/com.android.providers.telephony/databases/mmssms.db这 个 数 据 库 有
张表,比如:
sms 目录下有两张表分别为:
inbox:存储收到的短信信息
outbox:存储发送的短信信息
mms 目录下也有几张表分别为:
inbox:存储接收到的彩信
outbox:存储发送的彩信
pud:存储彩信标题、彩信接收时间和彩信 ID 等等信息
part:存储彩信的彩信内容(文本、音乐、图象)的文件名、文件类型等信息
短信
的 是
Java 代码
publicstaticnalUrismsUri = Uri.parse("content://sms");
的 是
Java 代码
publicstaticnalUrismsUri = Uri.parse("content://sms/inbox");
比如 inbox 表有以下表项
表项含义
_id:短信序号,如 100
thread_id:对话的序号,如 100,与同一个手机号互发的短信,其序号是相同的
:发件人地址,即手机号,如 TEXT
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为 null
:日期,
型,如
,可以对日期显示格式进行设置
protocol:协议 0 SMS_RPOTO 短信,1 MMS_PROTO 彩信
read:是否阅读 0 未读,1 已读
:短信状态
接收, ! !"#
$ :短信类型
是接收到的, "
是已发出
reply_path_present:
subject:短信标题
$ :短信具体内容 TEXT
service_center:短信服务中心号码编号,如+8613800755500
彩信
、 表
mmssms.db 库中的 pdu 表存储了彩信标题、彩信接收时间和彩信 ID 等信息,其中“ % ”
是主键,唯一标识了一个条彩信
2、 表
mmssms.db 库中的 part 表存储了彩信内容[文本、音乐、图象]的文件名、文件类型信息。
其中“ & 对应着
表中的“ %& ,“ & 是文件类型 , “ %& 是存储路径。
3、彩信文件读取
彩信附件文件的地址存储在 mmssms.db 的 part 表的_data 字段,形如“/data/data/com.an
droid.providers.telephony/app_parts/PART_1262693697763”,但在应用中读取彩信附件
时 , 这 个 字 段 基 本 没 什 么 用 , 因 为 不 能 直 接 读 取 这 个 文 件 。 读 取 同 样 要 通 过
'() , *+,
为“ -... & ,该
*+,
就是对应着
表 。 可以使用
下列代码段来读取文件:
Cursor mmsInboxcur = cr.query(Uri.parse("content://mms/inbox"),null,null,null,"date desc");
if(mmsInboxcur != null)
{//彩信
//根据彩信 ID 查询彩信的附件
int cnt = mmsInboxcur.getCount();//系统中彩信的总条数
if(mmsInboxcur.moveToNext())
{//时间的降序排列可取出最新收到的彩信所属项的 id
//下边这三行代码是到 mms/inbox 中取出最新收到的短信的_id 值,并将其转化为字符串类型
int idIndex = mmsInboxcur.getColumnIndex("_id");
int partID = mmsInboxcur.getInt(idIndex);
String partIDStr = String.valueOf(partID);
//构造一个筛选条件表达式,注意 TEXT 类型的变量的表达式为 para='xxxx',这两个'一定要
String selectionPart = new String("mid='" +partIDStr+"'");//part 表中的 mid 外键为 pdu 表中的_id
//去参数 1[mms/part 表中]指示的表中按参数 3 指定的筛选条件过滤出想要的表项内容,
//想要的表项内容由参数 2 指定,这里为 null,表示全部内容
//query()的最后一个参数是返回结果的排序方式,即按照参数 1 所指定的表中的哪个表项
//进行升序或者降序排列返回结果
Cursor mmsPart = cr.query(Uri.parse("content://mms/part"), null, selectionPart, null, null);
//query()的返回结果指向的是有效表项的下一项,所以需要先 moveToNext()一下才能获取第一项数
据
String[] values = null;
while (mmsPart.moveToNext())
{
//获取返回结果表的列名称,返回值为 string 类型的数组
//可以通过其看看这个表有哪些表项内容,比较重要
String[] coloumns = mmsPart.getColumnNames();
//返回表的列的个数,即表的列名称的个数
int icolunmncnt = mmsPart.getColumnCount();//这个表的列数
//将表的每一行的数据分别读出
if(values==null)
{
values = new String[icolunmncnt];//分配一块内存
}
for (int i = 0; i < icolunmncnt; i++)
{
values[i] = mmsPart.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"))
{ ////判断附件类型
Bitmap imagepic = getMmsImage(values[0]);
ImageView imageView = (ImageView)
MainActivity.instance.findViewById(R.id.imageView);
imageView.setImageBitmap(imagepic);
break;//一个 id 可能对应着好几张图片,但只取出最新的一个彩信的照片
}
}
}
private Bitmap getMmsImage(String _id)
{ //读取图片附件
Uri partURI = Uri.parse("content://mms/part/" + _id );
InputStream is = null;
Bitmap bitmap=null;
try
{
is = context.getContentResolver().openInputStream(partURI);
bitmap = BitmapFactory.decodeStream(is);
}
catch (IOException e)
剩余12页未读,继续阅读
资源评论
969722243
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
- 软件漏洞生命周期管理策略.pptx
- 毕业设计-基于Python实现的的简易气温爬虫,可以爬取全国各市的近7日气温数据
- 软件系统测试报告(实用版).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功