0

Как передать данные из приемника SMS-сообщений в соответствующий фрагмент для обновления данных. Я создал одно демо, в котором у меня было 7 разных фрагментов, в которых есть разные виды статуса. я создал внутренний широковещательный приемник, но это не очень хорошая идея, потому что, когда приходит sms, он вызывает все внутренние классы, поэтому я хочу создать в широковещательном классе приемника, а затем на sms, полученные, я хочу обновлять данные, я также хочу их хранить в базе данных и если фрагмент в настоящее время открыт, тогда обновить статус на нем, как изменить цвет кнопки на sms status change от ON до OFF.Как передавать данные из приемника SMS-сообщений на соответствующий фрагмент

У меня был установлен метод приемника sms-приемника(), пожалуйста, помогите мне.

@Override 
      public void onReceive(Context context, Intent intent) 
      { 
       db = new DataBaseHandler(context); 
       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().equalsIgnoreCase("+91XXXXXXXXXX")) 
          systemnumber = true; 
        } 
        if (systemnumber) 
        { 
         if (messages.length > 0) 
         { 
          StringBuffer content = new StringBuffer(); 
          for (SmsMessage sms : messages) 
           content.append(sms.MessageBody()); 
          mySmsText = content.toString(); 
         } 
         if(mySmsText.length() == 125) 
         { 
          // here i want to pass data from broadcast receiver to it's relevant fragment 
         } 
         else if(mySmsText.length() == 231 && mySmsText.replaceAll(" +", " ").split("\\n|\\s")[0].equals("ON")) 
         { 
          // here i want to pass data from broadcast receiver to it's relevant fragment 
}        }     
        } else 
       } 
      } 
+0

U может попробовать какое-то автобус событий, Отто, EventBus и т.д. – darwin

+0

я никогда не работать с радиовещательным приемником и смс так Я не знаю, как это сделать. –

+0

Проверьте эту ссылку https://github.com/greenrobot/EventBus – darwin

ответ

0

Наконец я сделал это ... // это основной класс вещания приемник

public void onReceive(Context context, Intent intent) 
    { 
     db = new DataBaseHandler(context); 
     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().equalsIgnoreCase("+XXXXXXXXXXXX")) 
        systemnumber = true; 
      } 
      if (systemnumber) 
      { 
       if (messages.length > 0) 
       { 
        StringBuffer content = new StringBuffer(); 
        for (SmsMessage sms : messages) 
         content.append(sms.getMessageBody()); 
        mySmsText = content.toString(); 

        Log.d("My-sms-text", "" + mySmsText); 
       } 
       Log.d("My-sms-length", "" + mySmsText.length()); 

       if(mySmsText.equalsIgnoreCase("ABC")) 
       { 

        Intent i = new Intent("broadCastOne"); 
        // Data you need to pass to activity 
        db.update_sys_pwd(mySmsText); 
        i.putExtra("message", mySmsText);     
        context.sendBroadcast(i); 
        Log.d("Call demo1","Demo1"); 
       } 
       else if(mySmsText.equalsIgnoreCase("DEF")) 
       { 
        Bundle extras = intent.getExtras(); 
        Intent i = new Intent("broadCastTwo"); 
        // Data you need to pass to activity 
        db.update_sys_pwd(mySmsText); 
        i.putExtra("message", mySmsText); 
        context.sendBroadcast(i); 
        Log.d("Call demo2","Demo2"); 
       } 

      } 

     } 
    } 

// зарегистрировать внутри деятельности я сделать что-то вроде ниже

registerReceiver(broadcastReceiver, new IntentFilter("broadCastOne")); 
//now i create broadcast receiver inside class 
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {   
      @Override 
      public void onReceive(Context context, Intent intent) 
      {   
       Bundle b = intent.getExtras(); 
       Log.d("Inside Demo1","Demo1"); 
       final String message = b.getString("message"); 

       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         updateUi(message);  
         Log.d("inside demoActivity","Inside runnable"); 
        } 
       });    
       Log.d("newmesage", "" + message); 
      } 
     }; 

// ниже метод используется для обновления UI, если в настоящее время активность открыта, иначе он хранит их внутри базы данных.

public void updateUi(String message) 
    { 
     db.update_sys_pwd(message); 
     t1.setText(message);   
     Log.d("Inside Demo1","Update UI"); 
    } 

любезно если неправильно, пожалуйста, скажи мне, так что я могу лучше обновить его ...

+0

Вот некоторая проблема, которую он вызывает только один раз, когда он не может ответить другим широковещательным приемником –

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

  • Нет связанных вопросов^_^