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

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

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


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

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---
            ...

    }

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

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


person Radu D    schedule 20.09.2010    source источник


Ответы (3)


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

person Chris Thompson    schedule 20.09.2010
comment
@MartinBories Спасибо за внимание! Заменил на рабочий. - person Chris Thompson; 27.04.2012

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

person kencorbin    schedule 03.04.2011

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

Удачи!

person Viktor    schedule 02.06.2011