0

如何将数据从SMS广播接收器传递到相关片段以更新数据。 我创建了一个演示,其中我有7个不同的片段,其中有不同种类的状态是通过。我创建了内部广播接收器,但它不是个好主意,因为当短信到达时,它会调用所有内部类,所以我想在广播接收器类上创建,然后在接收到的短信上我想更新数据,我也想将它们存储在数据库中如果片段当前打开,则更新其状态,如更改短信状态从开到关的按钮颜色。如何将数据从SMS广播接收器传递到相关片段

我已经把短信广播接收器的onReceive()方法好心地帮助我。

@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

这是它只能调用一次它不能响应其他广播接收机的一些问题 –