Переопределить приложение обмена сообщениями по умолчанию android

Я хочу переопределить приложение обмена сообщениями по умолчанию android. Если я получаю sms или mms, я хочу отправить это по электронной почте, но я не хочу получать уведомления по телефону. Поэтому в основном я хочу заменить приложение обмена сообщениями по умолчанию.

Как я могу сделать мое приложение по умолчанию, которое получает смс?


Большое спасибо. Это именно то, что мне нужно. Но у меня есть еще одна проблема. Я использовал приемник, чтобы получить сообщение … но я не знаю, как найти сообщение в телефоне и пометить его как прочитанное.

public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //---get the SMS message passed in--- Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; String str = ""; if (bundle != null) { //---retrieve the SMS message received--- Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int i=0; i<msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); str += "SMS from " + msgs[i].getOriginatingAddress(); str += " :"; str += msgs[i].getMessageBody().toString(); str += "\n"; } //---display the new SMS message--- Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); //---find and mark the messages as read--- Uri uriSms = Uri.parse("content://sms/inbox/"); try{ Cursor c = context.getContentResolver().query(uriSms, null,null,null,null); //---code to find the message by body and sender--- ... } 

Есть ли способ идентифицировать сообщение как идентификатор? Теперь я нахожу сообщение, сравнивающее номер bofy и отправителя для всех сообщений во входящих.

Спасибо, Раду

Существует не «приложение по умолчанию» в том, как вы думаете. Способ отправки приложений в Android осуществляется через Intents . Приложение использует IntentFilter для определения того, что он может обрабатывать определенные типы Intents . То, что вы ищете, – это BroadcastReceiver который может обрабатывать намерения SMSReceived . Это позволит уведомлять ваше приложение о получении SMS-сообщения. Чтобы скрыть уведомление, вам нужно будет пометить SMS как прочитанное с помощью SMS ContentProvider . Это очистит уведомление из лотка уведомлений. Невозможно скрыть сообщение от приложения обмена сообщениями по умолчанию, если вы не удалите сообщение из SMS ContentProvider . Ознакомьтесь с этой ссылкой, чтобы начать работу с BroadcastReceivers .

Существует способ заблокировать отправку сообщения в приложение обмена сообщениями по умолчанию. Если вы установите приоритет своего BroadcastReceiver достаточно высоким (мы используем 100) и вызываем abortBroadcast, чтобы заблокировать намерение от того, что он был выбран любым более низким приоритетом BroadcastReceivers. Он будет работать только в том случае, если намерение вещания будет заказано, что-то, что находится вне нашего контроля. Но оказывается, что передача SMS_SENT упорядочена, и я подозреваю, что широковещательная передача MMS_SENT также есть.

Если вы правильно присвоили приоритет своего BroadcastReceiver, ваше приложение будет первым, получающим сообщение, до того, как сообщение будет сохранено в базе данных. Я думаю, решение будет состоять в том, чтобы сохранить сообщение в базе данных самостоятельно и вызвать abortBroadcast(); , Но я не пробовал это сам.

Удачи!