Java Android-onActivityResult在另一个活动中
我是Java-Android新手,我对onActivityResult方法有问题,希望你能帮助我 我的应用程序总是使用BT适配器,但我需要检查BT适配器是否可用或已启用,对吗?但这不是我的问题 当我在MainActivity类中时,代码工作正常。但是当我在另一个活动中时——OnActivityResult(在MainActivity中)不再工作了 所以,当我在MainActivity中时,我会手动禁用蓝牙适配器,应用程序要求我启用BT->当我说不时-应用程序退出-这很好 但是,当我在另一个活动中时,我禁用BTA,应用程序要求我启用BTA(当我说否时)-不调用onActivityResult。为什么? 因此,我在MainActivity中有以下代码: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->当我说不时-应用程序退出-这很好 但是,当我在另一个活动中
@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);
}