在Android上检测MMS消息

在Android上检测MMS消息,第1张

概述我正在通过互联网搜索这个主题,找不到任何令人满意的答案……我正在尝试检测MMS消息(至少在开始时进入).我决定采用检测内容变化的方式.我已经下载了Android代码并确保我使用了正确的内容提供程序:“content://mms”(在android.provider.Telephony.Mms类中)并且我正在使用所有需要

我正在通过互联网搜索这个主题,找不到任何令人满意的答案……
我正在尝试检测MMS消息(至少在开始时进入).我决定采用检测内容变化的方式.
我已经下载了Android代码并确保我使用了正确的内容提供程序:“content:// mms”(在androID.provIDer.Telephony.Mms类中)并且我正在使用所有需要的权限
(来自Mms应用程序)
我想出了一个示例应用程序来检测传入的MMS消息,但它没有检测到它们.这是应用程序:

package com.kolomiyets.MMStesting;import androID.app.Activity;import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.Intent;import androID.content.IntentFilter;import androID.database.ContentObserver;import androID.net.Uri;import androID.os.Bundle;import androID.Widget.TextVIEw;public class MMStesting extends Activity {public static final String MMSMON_RECEIVED_MMS = "MMStesting.intent.action.MMSMON_RECEIVED_MMS";Uri mmsInURI = Uri.parse("content://mms");ContentObserver mmsObserver = new ContentObserver(null) {    @OverrIDe    public voID onChange(boolean selfChange) {        Thread mmsnotify = new Thread(){            @OverrIDe            public voID run() {                Intent mIntent = new Intent(MMSMON_RECEIVED_SMS);                sendbroadcast(mIntent);                super.run();            }        };        mmsnotify.start();        super.onChange(selfChange);    }};/** Called when the activity is first created. */@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.main);    broadcastReceiver mmsMonitorbroadcastReceiver = new broadcastReceiver() {        @OverrIDe        public voID onReceive(Context context, Intent intent) {            TextVIEw log = (TextVIEw)findVIEwByID(R.ID.mms_log);            log.append("\n MMS Received;");        }    };    IntentFilter mIntentFilter = new IntentFilter();    mIntentFilter.addAction(MMSMON_RECEIVED_MMS);    registerReceiver(mmsMonitorbroadcastReceiver, mIntentFilter);    getApplicationContext().getContentResolver().registerContentObserver(mmsInURI, true, mmsObserver);    getApplicationContext().getContentResolver().notifyChange(mmsInURI, mmsObserver);}@OverrIDeprotected voID onDestroy() {    getApplicationContext().getContentResolver().unregisterContentObserver(mmsObserver);    super.onDestroy();}}

和清单:

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"  package="com.kolomiyets.MMStesting"  androID:versionCode="1"  androID:versionname="1.0"><uses-sdk androID:minSdkVersion="4" /><uses-permission androID:name="androID.permission.RECEIVE_BOOT_COMPLETED"/><uses-permission androID:name="androID.permission.CALL_PHONE"/><uses-permission androID:name="androID.permission.READ_CONTACTS"/><uses-permission androID:name="androID.permission.WRITE_CONTACTS"/><uses-permission androID:name="androID.permission.RECEIVE_SMS"/><uses-permission androID:name="androID.permission.RECEIVE_MMS"/><uses-permission androID:name="androID.permission.SEND_SMS"/><uses-permission androID:name="androID.permission.VIBRATE"/><uses-permission androID:name="androID.permission.INTERNET"/><uses-permission androID:name="androID.permission.READ_SMS"/><uses-permission androID:name="androID.permission.WRITE_SMS"/><uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE"/><uses-permission androID:name="androID.permission.CHANGE_NETWORK_STATE"/><uses-permission androID:name="androID.permission.READ_PHONE_STATE"/><uses-permission androID:name="androID.permission.WAKE_LOCK"/><uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission androID:name="androID.permission.INSTALL_DRM"/><application androID:icon="@drawable/icon" androID:label="@string/app_name">    <activity androID:name=".MMStesting"              androID:label="@string/app_name">        <intent-filter>            <action androID:name="androID.intent.action.MAIN" />            <category androID:name="androID.intent.category.LAUNCHER" />        </intent-filter>    </activity></application>

到目前为止,我尝试了“content:// mms-sms”,应用程序在设备收到MMS消息后开始无休止地检测到内容.状态栏中没有关于新MMS的指示(应该是这样),但消息显示在传入消息中o_O …

此外,我尝试了“内容://短信”,一切都按预期工作(检测到收件人和外发短信甚至彩信o_O)

我误解了什么吗?
有没有办法纠正我的应用程序,以便检测“content:// mms”的变化?
如果它在这个应用程序中不起作用,我将无法在我的数据库请求中使用此内容?
如果我用“content:// sms”检测到更改,我该如何区分短信和彩信? (我也希望得到彩信中的内容).
或者最好的想法是从AndroID源码中获取所有这些类并尝试按照我想要的方式修改它们? ……但我不想这样做)))

这里有一个

grepcode.com: Telephony class that contains MMS calass(这个网站也方便浏览androID源代码)

此信息在某种程度上描述了如何从数据库中的MMS消息中检索信息.但是,我仍然无法弄清楚检测输入和传出MMS消息的方法.

在我看来,我必须监视“content:// sms”以便检测MMS(因为“content:// sms”对传入的MMS做出反应而“content:// mms”没有),而不是在Cursor和ContentResolver上使用“content:// mms”.

但我不确定这是一个正确的方法……我也不明白实际部分(或PduPart)代表什么…我会通过从MMS检索部分来获得完整的图片,或者它将成为图片? “content:// mms // part”和“content:// mms / part /”之间有什么区别吗?

这也是WAP Push Messages的一个有趣时刻.据我所知,这些代表某些带有超链接的特殊SMS消息,它们还用于将配置从移动提供商传输到客户端的电话.这节课:

code.google.com: MmsReceiver.java
应该借助WAP推送按摩检测MMS消息.

我真的无法理解它.怎么样?

解决方法:

检测收到的MMS消息很容易,只需在广播接收器中监听WAP_PUSH_RECIEVED事件,如…

<receiver androID:name=".PushReceiver">  <intent-filter>    <action androID:name="androID.provIDer.Telephony.WAP_PUSH_RECEIVED" />    <data androID:mimeType="application/vnd.wap.mms-message" />  </intent-filter></receiver>

理解你得到的东西要困难得多.我设法通过克隆来自Mms应用程序的PDU解析代码,从WAP_PUSH_RECEIVED意图解码我想要的一切.

从部件文件中检索实际内容是我仍在努力的,这就是我首先找到这个主题的方法.

总结

以上是内存溢出为你收集整理的在Android上检测MMS消息全部内容,希望文章能够帮你解决在Android上检测MMS消息所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1102570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存