2014-01-08 2 views
-1

Мне нужен ваш совет со следующей задачей. Дело в том, что мне нужно удержать свое приложение с определенным номером мобильного телефона, чтобы устройство с моим приложением реагировало только на SMS с этого номера, а другие номера должны быть уловлены со стандартными или любыми другими сторонними приложениями. Мне это нужно, потому что SMS должен содержать конкретные данные, которые можно декодировать только с помощью специального приложения.Как поймать конкретное приложение SMS только от конкретного отправителя?

Итак, что я должен сделать, чтобы осознать это или что дикие должны быть проверены мной :)?

Как всегда, заблаговременно!

+0

Когда вы сможете прочитать смс, то вы можете отфильтровать его по номеру телефона или тому, что захочет. Просто сначала получите смс ... http://andro-source.blogspot.com/2013/02/sms-reading-in-android-programmatically.html – Daler

+1

Обратите внимание, что то, что вы хотите, невозможно с Android 4.4, если как * все * SMS-сообщения доставляются выбранным пользователем клиентом SMS по умолчанию. – CommonsWare

+0

@Daler Спасибо за ссылку –

ответ

1

Для того, чтобы сделать это, вам нужно сделать что-то вдоль этих линий:

  1. Добавить необходимые права для манифеста. Возможно RECEIVE_SMS
  2. Создание SMS BroadcastReceiver
  3. обрабатывать входящие SMS внутри вашего приемника
  4. Выберите потребить сообщение (если применимо только к вашему приложению), или пусть приложение запас смс забрать его.

Ни одно из следующего кода не проверяется, более отправная точка:

Manifest

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<receiver android:name=".YOURSMSReceiver"> 
    <intent-filter android:priority="SOMENUMBER"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
    </intent-filter> 
</receiver> 

YOURSMSReceiver

public class YOURSMSReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceiver(Context context, Intent intent) 
    { 
     boolean bConsumeSms = false;   // flag to consume the sms so stock app doesn't pick it up 

     String data = ""; 
     if(intent.getAction().equals(android.provider.Telephony.SMS_RECEIVED)) 
     { 
      Bundle bundlePdus = intent.getExtras(); 
      Object[] pdus = (Object[])bundlePdus.get("pdus"); 
      SmsMessage messages = SmsMessage.createFromPdu((byte[])pdus[0]); 
      if(messages.getOriginatingAddress() == YOURCELLNUMBER) 
      { 
        // do something with the content. 
        // held in: messages.getMessageBody() 
        data = messages.getMessageBody(); // your custom content 

        // consume this sms 
        bCOnsume = true; 
      } 

      // in order to consume the message, we have to use abortBroadcast(). But only if we've 
      // processed it first. If not, then the stock app, should be allowed to pick it up 
      if(bConsume) 
      { 
        abortBroadcast(); 
      } 
     } 
    } 
} 

Как я уже говорил, его полностью непроверенный, но в теории все y ou потребность есть. Вам также придется обрабатывать несколько сообщений, что я не беспокоил, исходя из размера массива pdu. Удачи!

Редактировать Компания CommonsWare указала, что 4.4 ОС Android обеспечивает все SMS независимо от них. Я не знал об этом.

+0

Благодарим вас за такое описательное объяснение. –

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