目录
BroadcastReceiver介绍
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,而BroadcastReceiver意为“广播接收者”,顾名思义就是对发送出来的 Broadcast进行过滤接收并响应的一类组件。本文将通过一个蓝牙连接的程序来介绍BroadcastReceiver的使用。
列表类组件ListView
ListView间接继承ViewGroup和AdapterView,属于容器类组件,可显示多个列表项。要为ListView指定要显示的列表项,可通过为其设置Adapter来制定显示的列表项。对于纯文字的的列表项,通常使用ArrayAdapter对象。
通过布局文件创建ArrayAdapter对象,可指定列表项的外观样式。然后使用ListView的setAdapter()方法将适配器Adapter与ListView关联,最后创建ListView的监听事件,如:
ArrayAdapter<String> mPairedDevicesArrayAdapter =
newArrayAdapter<>(this, R.layout.device_name); //通过布局文件创建ArrayAdapter
ListView pairedListView = (ListView) findViewById(R.id.lv_devices);
pairedListView.setAdapter(mPairedDevicesArrayAdapter); //ListView和ArrayAdapter关联
pairedListView.setOnItemClickListener(mDeviceClickListener); //设置监听事件
BluetoothAdapter的使用
BluetoothAdapter为本地的蓝牙适配器,通过该蓝牙适配器可以对蓝牙进行基本操作,例如:启动扫描设备(startDiscovery),获取已配对设备(getBoundedDevices),通过mac蓝牙地址获取蓝牙设备(getRemoteDevice),创建一个监听连接(listenUsingRfcommWithServiceRecord)等,代码示例如下:
BluetoothAdapter mBluetoothAdapter;
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); //获取适配器对象
//获取绑定的蓝牙集合
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if (!mBluetoothAdapter.isEnabled()) { //蓝牙是否可用
}
mBluetoothAdapter.disable(); //关闭蓝牙
if (mBluetoothAdapter.isDiscovering()) { //是否正在搜索
mBluetoothAdapter.cancelDiscovery(); //取消搜索
}
mBluetoothAdapter.startDiscovery(); //开始搜索
BroadcastReceive的注册
第一种方法为静态注册,直接在AndroidManifest.xml文件中进行配置,方法为在<receiver>标签内部加入<intent-filter>标签,并在这个标签内添加<action android:name="android.intent.action.MY_BROADCAST" />和<category android:name="android.intent.category.DEFAULT" />这两句声明。注意,这种注册方式是常驻型的,即应用关闭后如果还有广播信息传来,MyReceiver还是会被系统调用而自动运行,代码如下所示:
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_BROADCAST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
第二种方法为动态注册,这种注册方式为直接在Activity中通过Intent方法指定广播地址,与静态注册相反,这种注册方式不是常驻型的,会随着程序的生命周期结束而销毁,示例代码如下所示:
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MY_BROADCAST");