android中實現本地廣播
阿新 • • 發佈:2019-01-14
上一篇文章實現了自定義廣播: 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); } }
本地廣播的方式,傳送廣播和接收廣播都是在一個類裡面實現的,程式碼跟之前自定義廣播的程式碼很類似,只有很小的改動。
本地廣播只能以動態註冊的方式註冊,無法像自定義廣播以靜態的方式註冊。因為自定義廣播可以被外部應用接收到,靜態註冊功能允許在程式未啟動的情況下能收到廣播。本地廣播只能被自己接收到,也就不需要靜態註冊的功能了。
上面的程式碼,同時實現了廣播的時候,傳遞資料功能。程式碼很好理解,這裡就不做解釋了。