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

這是它只能調用一次它不能響應其他廣播接收機的一些問題 –