android 發送廣播,進行消息通訊


問題描述:

項目開發中經常會碰到各種各樣的要求,比如Activity(Fragment)之間傳值,方式方法還挺多。

但是如果隔了好幾個Activity(Fragment)或者有很多地方需要同步更新,那么就會用到通知了。

大概幾個步驟:

1、申明一個類,繼承BroadcastReceiver(具體負責接收通知的,通知到了負責處理顯示在UI)

2、注冊一個通知(干活以后,等待接收通知,要一個結果就行,哪里需要通知,那里注冊)

3、發送通知給注冊者(什么時候,什么地方開干,干完活,我(發送者)通知你(注冊者)結果)

4、反注冊通知(不管收沒收到通知,都得注銷廣播)

 

下面我們來看一下具體的實現:

/**
* 廣播接收器
* @author len
* @modify jiduoduo
*/
public class MsgReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
    //接收通知,更新UI

       //比如傳一個字符串,或者一個實體類或集合

       //有了intent就方便多了。這里收的是一個intent,那么發送肯定也要這樣一個intent。

       //下面是個傳字符串的

       //收到通知,將日期顯示在tv_time(TextView)

       String time = intent.getStringExtra("time","");

       tv_time.setText(time);
    }

}

 

// 那么光有干活的還不行,得有地方干活,誰有活干,誰注冊

// 干活以后,要個結果

private MsgReceiver msgReceiver; //建個通知管道,有了這個就可以收到通知了。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   //動態注冊廣播接收器
   msgReceiver = new MsgReceiver();
   IntentFilter intentFilter = new IntentFilter();
   intentFilter.addAction("com.example.xx.RECEIVER");//這里面的Action可以根據你的包來,這里的包是com.example.xx
   registerReceiver(msgReceiver, intentFilter);//如果是在fragment,那么getActivity().registerReceiver(msgReceiver, intentFilter);

}

//不管有沒有收到通知,注冊了就要注銷

protected void onDestroy() {

      //注銷廣播

      unregisterReceiver(msgReceiver);//如果是在fragment,那么getActivity().unregisterReceiver(msgReceiver);

      super.onDestroy();

}

 

 

//下面就要到具體的地方處理了,比如說付款成功以后,給需要的地方通知一個消息。

Intent intent = new Intent("com.example.xx.RECEIVER");  //這里的action要一致。

intent.putExtra("time", "2020-03-16");

sendBroadcast(intent);  //如果是在fragment,那么getActivity().sendBroadcast(intent); 

 


參考:https://blog.csdn.net/xiaanming/article/details/9750689

這兄弟寫的挺不錯的,里面是一個下載進度的例子,通過二種方法來實現。

 

說明:

以上是動態注冊,還可以靜態的注冊,具體的在AndroidManifest.xml中用。

 

類似這種,具體的可以參考這位兄弟的。

https://www.jianshu.com/p/989e7c2f9293

<receiver android:name=".MyBroadcastReceiver">   

 <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>

總結:
上面只是一個傳值的通知,比較簡單,但已經可以滿足大部分的需求。
也可以通過serivce來處理一些請求,
還有
Notification顯式的通知用戶。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM