知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
上面講的系統廣播是全局的,任何APP都能接收到你的廣播,這樣就很容易引起APP的安全性問題。很多時候我們只想接收來自本應用程序發出的廣播。
package cn.netkiller.broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; 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.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private TextView textView; private IntentFilter intentFilter; private LocalBroadcastManager localBroadcastManager; private MyBroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取LocalBroadcastManger 單li實例 localBroadcastManager = localBroadcastManager.getInstance(this); intentFilter = new IntentFilter(); intentFilter.addAction("cn.netkiller.broadcast.MESSAGE"); myBroadcastReceiver = new MyBroadcastReceiver(); //註冊本地廣播接收器 localBroadcastManager.registerReceiver(myBroadcastReceiver, intentFilter); textView = (TextView) findViewById(R.id.textView); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { textView.setText("Send"); Intent intent = new Intent(); intent.setAction("cn.netkiller.broadcast.MESSAGE"); intent.putExtra("msg", "http://www.netkiller.cn"); //發送本地廣播 localBroadcastManager.sendBroadcast(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); //註銷本地廣播接收器 localBroadcastManager.unregisterReceiver(myBroadcastReceiver); } //自定義內部類,繼承 BroadcastReceiver public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("msg"); Toast.makeText(context, data, Toast.LENGTH_SHORT).show(); } } }