Java Android-onActivityResult在另一个活动中

Java Android-onActivityResult在另一个活动中,java,android,android-activity,bluetooth,onactivityresult,Java,Android,Android Activity,Bluetooth,Onactivityresult,我是Java-Android新手,我对onActivityResult方法有问题,希望你能帮助我 我的应用程序总是使用BT适配器,但我需要检查BT适配器是否可用或已启用,对吗?但这不是我的问题 当我在MainActivity类中时,代码工作正常。但是当我在另一个活动中时——OnActivityResult(在MainActivity中)不再工作了 所以,当我在MainActivity中时,我会手动禁用蓝牙适配器,应用程序要求我启用BT->当我说不时-应用程序退出-这很好 但是,当我在另一个活动中

我是Java-Android新手,我对onActivityResult方法有问题,希望你能帮助我

我的应用程序总是使用BT适配器,但我需要检查BT适配器是否可用或已启用,对吗?但这不是我的问题

当我在MainActivity类中时,代码工作正常。但是当我在另一个活动中时——OnActivityResult(在MainActivity中)不再工作了

所以,当我在MainActivity中时,我会手动禁用蓝牙适配器,应用程序要求我启用BT->当我说不时-应用程序退出-这很好

但是,当我在另一个活动中时,我禁用BTA,应用程序要求我启用BTA(当我说否时)-不调用onActivityResult。为什么?

因此,我在MainActivity中有以下代码:

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

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }

    registerBluetoothAdapter();
}

private void registerBluetoothAdapter()
{
    if(!bluetooth.isAvailable())
    {
        finish();
        return;
    }

    if(!bluetooth.isEnabled())
    {
        bluetooth.sendEnableRequest(this);
    }

    receiver = new BluetoothBroadcastReceiver();
    registerReceiver(receiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    switch(requestCode)
    {
        case 1: // bluetooth enable request
            if(resultCode != RESULT_OK)
            {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("EXIT", true);
                startActivity(intent);
            }
            break;
    }
}
bluetooth方法只是来自父级的BluetoothAdapter。。。 这是我的适配器的广播

public class BluetoothBroadcastReceiver extends 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:
                MainActivity main = (MainActivity) context;
                main.startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 1);
                break;
        }
    }
}

}

我对我的英语感觉不好,所以。。很抱歉,谢谢您的帮助。

好的,您希望从任何活动中了解蓝牙设置页面上发生的情况。下面是你能得到的最接近的(我想)

如果你这样做

MainActivity main = (MainActivity) context;
                main.startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 1);
此结果表单严格绑定到
main活动
。因此,当结果到达时,如果您正在另一个
活动中,则不会调用
onActivityResult

添加权限

<uses-permission android:name="android.permission.BLUETOOTH" />
有不同的情况,

  • BluetoothAdapter.STATE\u关闭
  • BluetoothAdapter.STATE\u正在关闭
  • BluetoothAdapter.STATE_ON
  • BluetoothAdapter.STATE\u打开
  • 以及

    在所有想看到蓝牙a弹出窗口的
    acvtivity
    中,按照以下步骤进行注册和注册

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Register for reciever
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(mReceiver, filter);
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
    
        // Unregister broadcast listeners
        unregisterReceiver(mReceiver);
    }
    
    然后管理应用程序从每个活动中的退出

    注:

    如果要重用代码


    然后,您可以将
    活动
    类扩展到自定义的
    BroadCastHandleable
    类,并在其中包含此私有MRECIver变量,并扩展需要使用此自定义活动类显示弹出窗口的所有活动类。

    在活动中调用onActivityResult()被称为。如果已从主活动调用startActivityForResult,则仅会回调主活动中的onActivityResult,而不会回调任何其他活动。因此,请相应地调整代码。在其他活动中也要这样做。

    谢谢,我理解。但是我该怎么做呢?@crmk_МццццПццццццццццццц@我很高兴能提供帮助,拥有一个自定义类有点棘手。我没有完全解释清楚。如果你遇到什么事,请告诉我
    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) {
                 //Handle your case
                }
            }
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Register for reciever
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(mReceiver, filter);
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
    
        // Unregister broadcast listeners
        unregisterReceiver(mReceiver);
    }