2010-09-20 2 views
3

Я хочу переопределить приложение для обмена сообщениями по умолчанию для Android. Если я получаю sms или mms, я хочу отправить их по электронной почте, но я не хочу получать уведомления по телефону. Так что я хочу заменить приложение обмена сообщениями по умолчанию.Переопределить приложение обмена сообщениями по умолчанию 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--- 
      ... 

    } 

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

Спасибо, Radu

ответ

8

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

+0

Ссылка больше недоступна ... –

+0

@MartinBories Спасибо за поддержку! Я заменил его тем, кто работает. –

0

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

0

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

Удачи вам!

Смежные вопросы