Я искал эту тему в Интернете и не смог найти удовлетворительного ответа ... Я пытаюсь обнаружить MMS-сообщения (входящие хотя бы для начала).И я решил пройти путь обнаружения изменений в содержании.Я загрузил коды Android и убедился, что использую правильный поставщик контента: "content: // mms" (в классе android.provider.Telephony.Mms) и использую все необходимые разрешения (из приложения Mms). IПридумали пример приложения, которое обнаруживает входящие 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-сообщение.В строке состояния нет индикации о новых MMS (как и должно быть), однако сообщение появляется во входящих сообщениях o_O ...
Также я попытался поставить "content: // sms" и все работаеткак и предполагалось (обнаружение входящих и исходящих SMS и даже MMS o_O)
Я что-то не так понимаю?Есть ли способ исправить мое приложение, чтобы оно обнаруживало изменения в "content: // mms"?Если это не работает в этом приложении, то я не смогу использовать этот контент в моих запросах к базе данных?Если я обнаружу изменения с помощью «content: // sms», как я могу различить SMS и MMS?(Я хотел бы также получить то, что есть в MMS).Или, может быть, лучшая идея - просто взять все эти классы из источников Android и попытаться изменить их так, как я хочу?... но я бы не хотел этого делать)))
Вот
grepcode.com: класс телефонии, содержащий MMS-сообщение (также этот сайт)удобен для просмотра исходного кода Android)
Эта информация несколько описывает, как извлечь информацию из MMS-сообщений, находящихся в базе данных.Однако я до сих пор не могу найти способ обнаружить входящих и исходящих MMS-сообщений.
Мне кажется, что мне нужно отслеживать "content: // sms", чтобы обнаружить MMS-сообщения (поскольку "content: // sms" реагирует на входящие MMS-сообщения и "content: // mms")не), а затем работать с «content: // mms» над Cursor и ContentResolver.
Но я не уверен, что это правильный путь ... Также я не понимаю, что на самом деле Part (или PduPart) представляет ... получу ли я полное изображение, извлекая часть из MMS, или оно будет частью изображения?И есть ли разница между "content: // mms // part" и "content: // mms / part /"?
Вот еще один интересный момент с WAP Push Messages.Насколько я понял, они представляют собой какие-то особые SMS-сообщения с гиперссылками, и они также используются для передачи конфигураций от оператора мобильной связи на телефон клиента.Этот класс:
code.google.com: MmsReceiver.java должен обнаруживать MMS-сообщения с помощью WAP Push Massages.
Я действительно не могу понять это.Как?