Android BroadcastReceiver + 蓝牙状态监听Demo

xiaoxiao2021-02-28  179

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>
转载请注明原文地址: https://www.6miu.com/read-76182.html

最新回复(0)