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);
    }

}

 

本地广播的方式,发送广播和接收广播都是在一个类里面实现的,代码跟之前自定义广播的代码很类似,只有很小的改动。

本地广播只能以动态注册的方式注册,无法像自定义广播以静态的方式注册。因为自定义广播可以被外部应用接收到,静态注册功能允许在程序未启动的情况下能收到广播。本地广播只能被自己接收到,也就不需要静态注册的功能了。

上面的代码,同时实现了广播的时候,传递数据功能。代码很好理解,这里就不做解释了。

posted @ 2019-01-14 15:01  魔豆  阅读(858)  评论(0编辑  收藏  举报