Android BroadcastReceiver + 蓝牙状态监听Demo

1、BroadcastReceiver基础

  • 动态注册
  • 静态注册
  • 动态绑定
  • 动态注销
  • 实现静态注销【其实就是设置不去响应,并没有所谓注销】

2、代码走起

MyBroadcast:

会在MianActivity中使用代码动态注册它

package weizhengzhou.top.interviewbroadcast.BroadcastDemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by 75213 on 2017/7/11.
 * Are you known Broadcast ?
 * Broadcast(广播)是在在组件中传播数据(Intent)的一种机制。通过Broadcast发送者和接受者都不需要知道对方是否存在。
 * Are you known BroadcastReceiver ?
 * BroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。
 */

// 使用动态注册
public class MyBroadcast extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context , "动态注册广播" , Toast.LENGTH_SHORT).show();
    }
}

MyBroadcast2:

会在AndroidManifes.xml中使用j静态注册它

package weizhengzhou.top.interviewbroadcast.BroadcastDemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by 75213 on 2017/7/11.
 */

//使用静态注册
public class MyBroadcast2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context , "静态注册广播" , Toast.LENGTH_SHORT).show();
    }
}

MianActivity:

里面有部分代码是实现蓝牙状态监听的

package weizhengzhou.top.interviewbroadcast;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import weizhengzhou.top.interviewbroadcast.BluetoothStateBroadcastReceiver.BluetoothStateBroadcastReceiver;
import weizhengzhou.top.interviewbroadcast.BroadcastDemo.MyBroadcast;
import weizhengzhou.top.interviewbroadcast.BroadcastDemo.MyBroadcast2;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mButton1 , mButton2 , mButton3 , mButton4 , mButton5 , mButton6;
    private MyBroadcast mMyBroadcast;
    private BluetoothStateBroadcastReceiver mReceiver;
    private BluetoothAdapter mBluetoothAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMyBroadcast = new MyBroadcast();
        mReceiver = new BluetoothStateBroadcastReceiver();
        mButton1 = (Button)findViewById(R.id.testButton1);
        mButton2 = (Button)findViewById(R.id.testButton2);
        mButton3 = (Button)findViewById(R.id.testButton3);
        mButton4 = (Button)findViewById(R.id.testButton4);
        mButton5 = (Button)findViewById(R.id.testButton5);
        mButton6 = (Button)findViewById(R.id.testButton6);
        mButton1.setOnClickListener(this);
        mButton2.setOnClickListener(this);
        mButton3.setOnClickListener(this);
        mButton4.setOnClickListener(this);
        mButton5.setOnClickListener(this);
        mButton6.setOnClickListener(this);
        registerReceiver(mReceiver , makeFilters());
        //获取蓝牙适配器实例。如果设备不支持蓝牙则返回null
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        //获取状态码
       int test =  mBluetoothAdapter.getState();
        //判断蓝牙状态
        switch (test){
            case BluetoothAdapter.STATE_CONNECTED:
                Toast.makeText(this , "判断状态为连接中" , Toast.LENGTH_SHORT).show();
                break;
            case BluetoothAdapter.STATE_CONNECTING:
                Toast.makeText(this , "判断状态为连接" , Toast.LENGTH_SHORT).show();
                break;
            case BluetoothAdapter.STATE_DISCONNECTED:
                Toast.makeText(this , "判断状态为断开" , Toast.LENGTH_SHORT).show();
                break;
            case BluetoothAdapter.STATE_DISCONNECTING:
                Toast.makeText(this , "判断状态为断中" , Toast.LENGTH_SHORT).show();
                break;
            case BluetoothAdapter.STATE_OFF:
                Toast.makeText(this , "关闭" , Toast.LENGTH_SHORT).show();
                break;
            case BluetoothAdapter.STATE_ON:
                Toast.makeText(this , "打开" , Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }

    //蓝牙监听需要添加的Action
    private IntentFilter makeFilters(){
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED");
        intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
        intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
        intentFilter.addAction("android.bluetooth.BluetoothAdapter.STATE_OFF");
        intentFilter.addAction("android.bluetooth.BluetoothAdapter.STATE_ON");
        return intentFilter;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.testButton1:
                //动态注册
                IntentFilter intentFilter = new IntentFilter();
                intentFilter.addAction("weizhengzhou.top");
                registerReceiver(mMyBroadcast, intentFilter);
                break;
            case R.id.testButton2:
                //发送动态注册的广播信息
                Intent intent = new Intent("weizhengzhou.top");
                sendBroadcast(intent);
                break;
            case R.id.testButton3:
                //发送静态注册的广播信息
                Intent intent2 = new Intent("weizhengzhou.top.test");
                sendBroadcast(intent2);
                break;
            case R.id.testButton4:
                //解除动态绑定的广播接收者
                unregisterReceiver(mMyBroadcast);
                break;
            case R.id.testButton5:
                //实现不响应静态注册的广播
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("weizhengzhou.top.interviewbroadcast" ,
                                MyBroadcast2.class.getName()),
                        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                        PackageManager.DONT_KILL_APP);
                break;
            case R.id.testButton6:
                //重新激活静态广播接收者
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("weizhengzhou.top.interviewbroadcast",
                                MyBroadcast2.class.getName()),
                                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
                                PackageManager.DONT_KILL_APP);
                break;
        }
    }
}

3、蓝牙状态监听具体代码

BluetoothStateBroadcastReceiver:

主要实现蓝牙状态广播接收

package weizhengzhou.top.interviewbroadcast.BluetoothStateBroadcastReceiver;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by 75213 on 2017/7/11.
 * 实现蓝牙状态广播接收
 */

public class BluetoothStateBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        //获取蓝牙设备实例【如果无设备链接会返回null,如果在无实例的状态下调用了实例的方法,会报空指针异常】
        //主要与蓝牙设备有关系
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        Toast.makeText(context , "监听蓝牙变化" , Toast.LENGTH_SHORT).show();
        switch (action){
            case BluetoothDevice.ACTION_ACL_CONNECTED:
                Toast.makeText(context , "蓝牙设备:" + device.getName() + "已链接" , Toast.LENGTH_SHORT).show();
                break;
            case BluetoothDevice.ACTION_ACL_DISCONNECTED:
                Toast.makeText(context , "蓝牙设备:" + device.getName() + "断开链接" , Toast.LENGTH_SHORT).show();
                break;
            //上面的两个链接监听,其实也可以BluetoothAdapter实现,修改状态码即可
            case BluetoothAdapter.ACTION_STATE_CHANGED:
                int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
                switch (blueState){
                    case BluetoothAdapter.STATE_OFF:
                        Toast.makeText(context , "蓝牙关闭", Toast.LENGTH_SHORT).show();
                        break;
                    case BluetoothAdapter.STATE_ON:
                        Toast.makeText(context , "蓝牙开启"  , Toast.LENGTH_SHORT).show();
                        break;
                }
                break;
            default:
                break;
        }

    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="weizhengzhou.top.interviewbroadcast">

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <receiver android:name=".BroadcastDemo.MyBroadcast2"
                  android:enabled="true"
                  android:exported="true">
            <intent-filter>
                <action android:name="weizhengzhou.top.test"></action>
            </intent-filter>
        </receiver>
    </application>

</manifest>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值