1. 程式人生 > >android中實現本地廣播

android中實現本地廣播

上一篇文章實現了自定義廣播: android中實現自定義廣播

自定義廣播允許被其他應用使用,有些情況下只允許廣播在本應用範圍內使用,可以用本地廣播的方式實現

下面是實現的程式碼部分,MainActivity.java:

package com.example.chenrui.app1;

import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter; import android.net.wifi.WifiManager; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;
public class MainActivity extends AppCompatActivity { private BroadcastReceiver receiver; private LocalBroadcastManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter
= new IntentFilter(); filter.addAction("com.example.chenrui.app1.broadcast2"); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String key = intent.getStringExtra("key"); Toast.makeText(context, "接收廣播2,key:" + key, Toast.LENGTH_SHORT).show(); } }; manager = LocalBroadcastManager.getInstance(this); manager.registerReceiver(receiver,filter); Button button = findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.chenrui.app1.broadcast2"); intent.putExtra("key","hello world"); manager.sendBroadcast(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); manager.unregisterReceiver(receiver); } }

 

本地廣播的方式,傳送廣播和接收廣播都是在一個類裡面實現的,程式碼跟之前自定義廣播的程式碼很類似,只有很小的改動。

本地廣播只能以動態註冊的方式註冊,無法像自定義廣播以靜態的方式註冊。因為自定義廣播可以被外部應用接收到,靜態註冊功能允許在程式未啟動的情況下能收到廣播。本地廣播只能被自己接收到,也就不需要靜態註冊的功能了。

上面的程式碼,同時實現了廣播的時候,傳遞資料功能。程式碼很好理解,這裡就不做解釋了。