检测对BluetoothAdapter所做的状态更改?
我有一个应用程序的button,我用来打开和closuresBT。 我在那里有下面的代码;
public void buttonFlip(View view) { flipBT(); buttonText(view); } public void buttonText(View view) { Button buttonText = (Button) findViewById(R.id.button1); if (mBluetoothAdapter.isEnabled() || (mBluetoothAdapter.a)) { buttonText.setText(R.string.bluetooth_on); } else { buttonText.setText(R.string.bluetooth_off); } } private void flipBT() { if (mBluetoothAdapter.isEnabled()) { mBluetoothAdapter.disable(); } else { mBluetoothAdapter.enable(); } }
我打电话buttonFlip,翻转BT状态,然后调用ButtonText,它应该更新UI。 然而,我遇到的问题是,BT开启需要几秒钟 – 在这段时间内,BT状态未启用,使我的button说蓝牙closures,即使它将在2秒钟内打开。
我在BluetoothAdapter android文档中find了STATE_CONNECTING
常量,但是…我根本不知道如何使用它,作为一个新手和所有。
所以,我有两个问题:
- 有没有办法将UI元素(如button或图像)dynamic绑定到BT状态,以便当BT状态改变时,button也会改变?
- 否则,我想要按下button,并获得正确的状态(我想它说BT,即使它只是连接,因为它将在2秒钟)。 我如何做到这一点?
您将需要注册BroadcastReceiver
以侦听BluetoothAdapter
状态的任何更改:
作为你的Activity
一个私有实例variables(或者在一个单独的类文件中,无论你喜欢哪一个):
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); switch (state) { case BluetoothAdapter.STATE_OFF: setButtonText("Bluetooth off"); break; case BluetoothAdapter.STATE_TURNING_OFF: setButtonText("Turning Bluetooth off..."); break; case BluetoothAdapter.STATE_ON: setButtonText("Bluetooth on"); break; case BluetoothAdapter.STATE_TURNING_ON: setButtonText("Turning Bluetooth on..."); break; } } } };
请注意,这里假定你的Activity
实现了一个方法setButtonText(String text)
,它将相应地改变Button
的文本。
然后在您的Activity
,注册并取消注册BroadcastReceiver
如下,
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* ... */ // Register for broadcasts on BluetoothAdapter state change IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(mReceiver, filter); } @Override public void onDestroy() { super.onDestroy(); /* ... */ // Unregister broadcast listeners unregisterReceiver(mReceiver); }
- android服务startService()和bindService()
- 当我将Firebase中的JSON转换为Java对象时,为什么会出现“无法popupinput”?
- ActionBarActivity无法parsing符号
- Environment.getExternalStorageDirectory不会返回可移动存储的path
- Google Play服务更新
- Android 6.0权限错误
- Android资源未findexception?
- INSTALL_FAILED_DUPLICATE_PERMISSION … C2D_MESSAGE
- Google Cloud Messaging – 在networking状态发生变化之前有时收不到消息