在Android Studio中更新交换机上的蓝牙状态

在Android Studio中更新交换机上的蓝牙状态,android,android-studio-3.0,Android,Android Studio 3.0,我从Android Studio上的Android应用程序开始编程,我在一个简单的蓝牙开/关开关上练习,开关工作正常它可以激活和禁用蓝牙,但如果我从状态栏上的快速设置激活或禁用蓝牙(不关闭应用程序),开关不会更新。我认为应用程序失去了焦点,所以我尝试验证蓝牙状态并更新onResume上的开关,但它不起作用。一些想法 public class bluetooth_Control extends AppCompatActivity{ Switch aSwitch; Bluetoot

我从Android Studio上的Android应用程序开始编程,我在一个简单的蓝牙开/关开关上练习,开关工作正常它可以激活和禁用蓝牙,但如果我从状态栏上的快速设置激活或禁用蓝牙(不关闭应用程序),开关不会更新。我认为应用程序失去了焦点,所以我尝试验证蓝牙状态并更新onResume上的开关,但它不起作用。一些想法

public class bluetooth_Control extends AppCompatActivity{

    Switch aSwitch;
    BluetoothAdapter blueadp;

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

        aSwitch = (Switch) findViewById(R.id.switch2);
        blueadp =   BluetoothAdapter.getDefaultAdapter();



        aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){

                    Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                    startActivityForResult(intent, 0);

                }
                else{

                    blueadp.disable();
                }
            }
        });

    }



    @Override
    protected void onResume(){
        super.onResume();
        setBTswitch(blueadp);
    }


    public void setBTswitch(BluetoothAdapter b){
        if(b.isEnabled()){
            aSwitch.setChecked(true);
        }
        else{
            aSwitch.setChecked(false);
        }
    }
}


您应该添加关于“更新onResume()上的开关”的代码,否则我们无法找出问题所在。我建议在onResume()回调中添加日志,以检查获取蓝牙状态的代码是否工作正常。

好的,如果有人有同样的不安情绪,我只会说:onWindowFocusChanged(),因为当您向下拖动通知和快速设置面板时,onResume()和onPause()不会触发。这就解决了问题,可能它看起来不干净,也不准确,因为在你向上拖动隐藏通知和快速设置面板之前,开关会更新。我已经做了更多的研究,可能会更准确地使用tiles侦听器。

有吗,setBTswitch方法检查适配器状态,如果适配器处于启用状态,则将开关设置为选中状态;如果适配器处于禁用状态,则将开关设置为未选中状态not@tatteredPrince抱歉,没有向下滚动查看。如上所述,尝试添加日志以缩小范围,例如:然后您可以确定是没有正确获取蓝牙状态,还是无法设置交换机的已检查状态。@TatteredPress抱歉没有向下滚动以检查。就像上面提到的,尝试添加日志以缩小范围,如setBTswitch():boolean isEnabled=b.isEnabled();Log.d(“my_标签”,“蓝牙已启用:+isEnabled?”“是”:“否”);然后,您可以确定是没有正确获取蓝牙状态,还是无法设置交换机的已检查状态。谢谢,请使用日志进行检查,即使我更改了交换机更新的设备的方向,该方法也可以正常工作。所以我的问题是,当快速设置覆盖在活动上时,活动会发生什么变化?是暂停吗?还是什么都不像海皮斯?