【问题标题】:Detecting MMS messages on Android在 Android 上检测彩信
【发布时间】:2011-07-16 20:01:25
【问题描述】:

我正在互联网上搜索这个主题,但找不到任何令人满意的答案... 我正在尝试检测彩信(至少在开始时收到)。我决定通过检测内容变化的方式。 我已经下载了 Android 代码并确保我使用了正确的内容提供程序:“content://mms”(在 android.provider.Telephony.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. */
@Override
public 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);


}

@Override
protected 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 消息后开始无休止地检测到某些东西。状态栏中没有关于新彩信的指示(应该如此),但是该消息出现在传入消息中o_O...

我还尝试输入“content://sms”,一切正常(检测传入和传出的 SMS 甚至 MMS o_O)

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

这是一个

grepcode.com: Telephony class that contains MMS calass(也是本站方便浏览android源码)

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

在我看来,我必须监控“content://sms”才能检测彩信(因为“content://sms”会对传入的彩信做出反应,而“content://mms”则不会) , 而不是在 Cursor 和 ContentResolver 上使用“content://mms”。

但我不确定这是一种正确的方法...而且我不明白 Part(或 PduPart)实际上代表什么...我会通过从 MMS 中检索 Part 来获得完整的图片吗?图片的一部分? “content://mms//part”和“content://mms/part/”有什么区别吗?

这也是 WAP 推送消息的一个有趣时刻。据我了解,这些代表某种带有超链接的特殊 SMS 消息,它们还用于将配置从移动提供商传输到客户的手机。这个类:

code.google.com: MmsReceiver.java 应该在 WAP Push Massages 的帮助下检测 MMS 消息。

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

【问题讨论】:

标签: android mms


【解决方案1】:

【讨论】:

  • 第一个链接有一个示例MMSMonitor 类,其中包含ServiceController 类型的变量mainActivity。 ServiceController 类在哪里实现?
  • 无法访问此链接。有存档吗?
【解决方案2】:

检测传入的彩信很容易,只需放入广播接收器监控 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 意图中解码了我想要的所有内容。

从零件文件中检索实际内容是我仍在努力的工作,这也是我最初找到这个主题的方式。

【讨论】:

  • 这个问题是当你收到广播时,内容提供者中不存在彩信
  • 您的 PushReceiver 类是什么样的?请贴出相关代码。
  • @kencorbin 我尝试了这个解决方案,但仍然无法接收广播。可能是什么问题?
  • 我在这里做类似的事情!!! stackoverflow.com/questions/21748209/…
  • 如果我们只想要发件人的电话号码怎么办?不是实际的图像。有没有简单的方法可以做到这一点?
【解决方案3】:

您的 ContentObserver 检测到的传入消息是通知类型 MMS,当手机收到此通知时,它将从 mmsc 下载真正的 MMS。所以,当你检测到新的消息时,你应该过滤通知类型。

【讨论】:

  • 你有一些示例代码来演示你在说什么吗?
【解决方案4】:
final IntentFilter filterMMS = IntentFilter.create("android.provider.Telephony.WAP_PUSH_RECEIVED", "application/vnd.wap.mms-message");
filterMMS.setPriority(Integer.MAX_VALUE);
registerReceiver(smsreceiver, filterMMS);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多