我正在互联网上搜索这个主题,但找不到任何令人满意的答案……我正在尝试检测彩信(至少开始时收到)。我决定通过检测内容变化的方式。我已经下载了 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. */
@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:包含MMS calass 的Telephony 类(也是这个站点方便浏览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 消息。
我实在想不通。如何?