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