2012-02-03 2 views
0

У меня есть приложение, которое прослушивает входящие сообщения, и если отправителем-отправителем является тот, который указан пользователем, он затем реагирует соответственно, показывая специальное предупреждение и прерывая широковещательную передачу, доступ к папке «Входящие». На Verizon он работает отлично. Я отправил более 300 без каких-либо проблем, как и несколько других тестеров.Приемник Sms работает только на устройствах verizon.

На любом другом носителе, однако, это беспорядок.

На AT & T трансляция никогда не прерывается, и она отображается в папке «Входящие». В Sprint трансляция прерывается, но она никогда не выходит за ее пределы. Цель AlertActivity никогда не вызывается, ни одно из сообщений, которые я поставил для проверки. На T-Mobile трансляция никогда не прерывается, и она появляется в папке «Входящие».

У меня есть приемник, сделанный в java, а не зарегистрированный в манифесте, потому что я зарегистрирую его в службе, которая запускается при запуске приложения и на BOOT_COMPLETED.

Сервис

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

    public void startService() { 
     IntentFilter SMSfilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
     this.registerReceiver(Receiver.br, SMSfilter); 
    } 

Приемник

static public BroadcastReceiver br = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 
    if (bundle != null) { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      final SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       if (messages[i].getOriginatingAddress().equals(Test.SENDER)) { 
        abortBroadcast(); 
        String[] body = messages[i].getDisplayMessageBody().split(" ", 7); 
        if (body[0].equals("test")) { 
         test = true; 
        } 
        cat = body[1]; 
        level = body[2]; 
        urgency = body[3]; 
        certainty = body[4]; 
        carrier = body[5]; 
        message = body[6]; 
        intent = new Intent(context, AlertActivity.class); 
        Bundle b = new Bundle(); 
        b.putString("title", cat); 
        b.putString("certainty", certainty); 
        b.putString("urgency", urgency); 
        b.putString("level", level); 
        b.putString("message", message); 
        b.putBoolean("test", test); 
        intent.putExtras(b); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
        carrierName = manager.getNetworkOperatorName(); 
        if (carrierName.replaceAll(" ", "").equals(carrier)) { 
         context.startActivity(intent); 
        } else { 
         //testing 
         toast(carrierName.replaceAll(" ", ""), context); 
        } 
       } 
      } 
    } 
    } 
}; 

Я использую эти импорта в приложение,

import android.telephony.SmsMessage; 
import android.telephony.TelephonyManager; 

Я знаю, что есть версия GSM из них, как хорошо, что я не использовать. Может быть, поэтому приложение не обнаруживает входящие сообщения на gsm-носителях?

ОБНОВЛЕНИЕ 1 Согласно http://developer.android.com/reference/android/telephony/gsm/package-summary.html его не из-за не используя ОСА конкретных импорта.

ANSWER Got it. Это связано с тем, как считывается номер отправителя входящих сообщений. На устройстве verizon он регистрируется как xxxxxxx на других, + 1xxxxxxx. Добавлена ​​возможность доступа к Test.SENDER или Test.SENDER_LAME, которая равна + 1xxxxxxx

+0

Похоже, что пришло время запустить отладчик, поставить некоторые точки останова и выполнить свой код. Или, регистрация всегда является опцией. У вас есть ошибки. Вы пытались отладить свой код? Как все прошло? –

+0

ive ставит тосты в ключевых точках, но im ждет на тестере от новичка wzw. прекрасно работает на моем устройстве и на всех устройствах, к которым у меня есть доступ. ошибка работы - это те, которые вы не можете воспроизвести на своем устройстве. – r2DoesInc

ответ

0

Получено. Это связано с тем, как считывается число отправителей входящих сообщений. На устройстве verizon он будет регистрироваться как xxxxxxx на других, + 1xxxxxxx. Добавлена ​​опция для доступа к Test.SENDER или Test.SENDER_LAME, которая равна + 1xxxxxxx

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