美文网首页
广播及广播接收器

广播及广播接收器

作者: 四喜汤圆 | 来源:发表于2018-06-03 15:15 被阅读4次
image.png

静态注册广播接收器

<receiver android:name=".MainActivity$MyGPSReceiver"
            android:exported="true"
            android:enabled="true">
     <intent-filter>
           <action android:name="android.location.PROVIDERS_CHANGED"/>
      </intent-filter>
 </receiver>

动态注册广播接收器

  • onResume()中注册【注册完成后会首先收到一条广播
  • onPause()中取消注册
package com.example.wifidemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private MyReceiver mMyReceiver;

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

    @Override
    protected void onPause() {
        super.onPause();
        // 取消注册广播接收器
        unregisterMyReceiver();

    }

    @Override
    protected void onResume() {
        super.onResume();
        // 注册广播接收器
        registerMyReceiver();
    }

    private void registerMyReceiver() {
        mMyReceiver = new MyReceiver();
        IntentFilter filter = new IntentFilter();
        // 接收wifi状态改变的广播
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        Log.e(TAG, "在onResume()方法中注册接收器");
        // 注册
        registerReceiver(mMyReceiver, filter);
    }

    private void unregisterMyReceiver() {
        if (mMyReceiver != null) {
            unregisterReceiver(mMyReceiver);
            mMyReceiver = null;
        }

    }

    class MyReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e(TAG, "收到广播");
            String action = intent.getAction();
            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
                int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
                Log.e("H3c", "wifiState" + wifiState);
                switch (wifiState) {
                    case WifiManager.WIFI_STATE_DISABLED:
                    case WifiManager.WIFI_STATE_DISABLING:
                    case WifiManager.WIFI_STATE_UNKNOWN:
                        break;
                    case WifiManager.WIFI_STATE_ENABLING:
                    case WifiManager.WIFI_STATE_ENABLED:
                        break;
                    //
                }
            }
        }
    }

}

发送本地广播,注册、取消注册本地广播接收器

package com.example.wifidemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private static final String MY_BROADCAST_ACTION = "my_broadcast";
    @BindView(R.id.btn_localbroadcast)
    Button btn_localbroadcast;
    private MyReceiver mMyReceiver;
    private LocalBroadcastManager mLocalBroadcastManager;
    private Context mContext;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        mContext = this;
    }

    @OnClick(R.id.btn_localbroadcast)
    public void sendLocalBoradcast(){
        Toast.makeText(this, "btn被点击", Toast.LENGTH_SHORT).show();
        Log.e(TAG,"btn被点击");
        // 发送本地广播
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
        Intent intent = new Intent();
        intent.setAction(MY_BROADCAST_ACTION);
        mLocalBroadcastManager.sendBroadcast(intent);
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 取消注册广播接收器
        unregisterMyReceiver();

    }

    @Override
    protected void onResume() {
        super.onResume();
        // 注册广播接收器
        registerMyReceiver();
    }

    private void registerMyReceiver() {
        Log.e(TAG, "在onResume()方法中注册接收器");
        mMyReceiver = new MyReceiver();
        IntentFilter filter = new IntentFilter();
        // 接收wifi状态改变的广播
        filter.addAction(MY_BROADCAST_ACTION);
        // 注册
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
        mLocalBroadcastManager.registerReceiver(mMyReceiver, filter);
    }

    private void unregisterMyReceiver() {
        if (mMyReceiver != null) {
            mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
            mLocalBroadcastManager.unregisterReceiver(mMyReceiver);
            mMyReceiver = null;
        }

    }

    class MyReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (MY_BROADCAST_ACTION.equals(action)) {
                Log.e(TAG, "接收到了广播");
            }


        }
    }


}

相关文章

  • 广播及广播接收器

    静态注册广播接收器 动态注册广播接收器 onResume()中注册【注册完成后会首先收到一条广播】 onPause...

  • 关于Broadcast

    前言 广播分类 标准广播:异步收发,所有的广播接收器几乎可以同时收到广播。有序广播:同步收发,当上一个广播接收器处...

  • Android Receiver广播特性,Receiver总结

    广播分为两大类 标准广播,所有广播接收器同时收到有序广播,所有广播接收器按顺序收到,可在中途拦截 广播有两种注册方...

  • Android 广播

    【Android 广播】 BroadcastReceiver简介 BroadcastReceiver(广播接收器)...

  • Android广播接收器(三)

    本地广播 前面两篇文章Android广播接收器(一)和Android广播接收器(二)讲的都属于全局广播,即发出的广...

  • 入门第五天

    广播接收器 分为动态广播器和静态广播器,静态广播器只能接受显式广播 广播 分为标准广播和有序广播,标准广播使得所有...

  • 第五章 全局大喇叭,详解广播机制

    5.1广播机制简介 广播分为标准广播和有序广播 标准广播:异步执行广播,广播发出后,所有的广播接收器都会几乎在同时...

  • Android - base - Broadcast

    四大组件之广播 大纲 广播机制简介 广播接收器 广播发信器 接收系统广播 发送自定义广播 本地广播 #广播机制简介...

  • 20170104第一行代码第五章BroadCast Receiv

    一、广播机制 标准广播:异步的,广播发送之后,所有的广播接收器几乎同时接受广播,广播效率比较高。但不能截断。 有序...

  • Broadcast 学习

    广播类别:标准广播,有序广播,本地广播 标准广播异步发送,所有人能够接收只要注册接收器就能监听 有序广播顺序发送,...

网友评论

      本文标题:广播及广播接收器

      本文链接:https://www.haomeiwen.com/subject/qskjsftx.html