2016-11-19 3 views
0

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

public static class SmsReceiver extends BroadcastReceiver { 
     String a = ""; 
     DataBaseHandler db; 
     @Override 
     public void onReceive(final Context context, final Intent intent) { 
      db = new DataBaseHandler(context); 

      if (!intent.getAction().equals(
        "android.provider.Telephony.SMS_RECEIVED")) 
       return; 
      else if (intent != null) { 
       Bundle bndl = intent.getExtras(); 
       SmsMessage[] msg = null; 
       String abc = ""; 
       String msgs = ""; 

       if (null != bndl) { // if start 
        Object[] pdus = (Object[]) bndl.get("pdus"); 
        msg = new SmsMessage[pdus.length]; 
        for (int i = 0; i < msg.length; i++) { 
         msg[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
         if (msg[i].getOriginatingAddress().equals("15555215556")) 
         { 
          abc = msg[i].getOriginatingAddress(); 
          msgs = msg[i].getMessageBody().toString(); 
         } 
        } 
        if (abc != "" && ! msgs.equals("")) 
        { // inner if start 
         String[] str_split = msgs.split("\\n|:|,"); 
         String temp = str_split[0].substring(str_split[0].lastIndexOf(' ') + 1).trim(); 
         ArrayList<String> numb =new ArrayList<String>(); 
         if (temp.equals("DEACTIVATED") || temp.equals(" ACTIVATED")) 
         { 
          String numbs ;       
          for (int j = 1; j < 10; j++) { 
           numbs = str_split[j].substring(str_split[j].lastIndexOf(',') + 1).trim(); 
           numb.add(numbs); 
          } 

          for (int i = 1; i < numb.size(); i++) 
           a += i + " " + numb.get(i) + "\n";       
          db.update_sys_pwd(temp); 
         } 
         else 
         { 
          return; 
         } 
        }// inner if over 
       } // if over 
      } 
     } // onReceive over 
    } 

Пожалуйста, помогите мне, потому что я никогда не работать с телефонией, GSM API. или как я могу создать 1 приемник, который обрабатывает весь другой приемник для данных обновления. как зарегистрировать весь вещательный приемник внутри 1 приемника, а затем установить файл манифеста.

Заранее спасибо.

+0

, пожалуйста, помогите мне, мне нужен ваш ответ. –

+0

Это тот же вид трансляции, который вы хотите добавить ко всем своим занятиям? – Ichthyocentaurs

+0

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

ответ

0

Лучше разрешить одиночное событие Single BroadcastReceiver hanle (принцип SOLID). Однако вы можете зарегистрировать несколько приемников, каждый из которых получает различное событие. В коде есть еще одна проблема - BroadcastReceiver работает в основном потоке, и Android предполагает, что код в BroadcastReceiver завершится очень быстро. Вам не следует выполнять какие-либо длительные действия (запись в базу данных). Вместо этого получите полученные данные и запустите IntentService для обработки этих данных путем передачи полученных значений через Intent

+0

так что смогите и скажите мне, что я делаю сейчас, правильно или неправильно? или вы можете предложить мне другие идеи, потому что я никогда не работаю с ним, поэтому у меня нет никаких идей. –

+0

Если вы зарегистрируете BroadcastReceiver в Manifest, он будет запускаться Android все время, даже когда ваше приложение будет закрыто. С другой стороны, когда вы регистрируете и дезарегистрируете его динамически (в методах .onpause() и .onResume()), он будет принимать события только тогда, когда этот экран активен –

+0

no i мои коды статуса принимаются в любое время не фиксируйте время, поэтому я не могу отменить регистрацию получателя –