我遇到了奇怪的问题。来自Activity onStart()我通过意图请求蓝牙激活和120s可发现性:
Intent activateBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivityForResult(activateBTIntent, BT_ACTIVATE_INTENT);
无论蓝牙是否已经激活,我都会使用它。 Android文档说,如果不是蓝牙将被激活,并且工作正常。在这两种情况下,我都会收到系统警报对话框
当我旋转屏幕时,我观察到闪烁。按是/否删除一个对话框,但下面还有另一个对话框。执行屏幕旋转我可以获得一堆警报对话框,并且必须按每个上的是/否来清除它们。
只有在发送意图时尚未启动蓝牙时才会出现所描述的问题,否则它会正常工作。试过不同的2.2手机,所有问题都存在。在我看来就像Android系统一样。
有没有人遇到过它,也许有一些有用的提示如何避免这种情况?
谢谢和问候。
答案 0 :(得分:2)
这是导致此问题的“设置”应用中的错误。 RequestPermissionActivity在轮换时复制其RequestPermissionHelperActivity实例。
答案 1 :(得分:1)
我遇到了同样的问题。在花了很多时间之后,我找到了一个解决方案。
您可以使用避免重复“蓝牙激活警报对话框”
activateBTIntent
的 FLAG_ACTIVITY_NO_HISTORY 标记。 但设置此标志会使startActivityForResult无法使用。
代码 -
Intent activateBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
activateBTIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(activateBTIntent);
将FLAG_ACTIVITY_NO_HISTORY与activateBTIntent一起使用将从历史堆栈中删除“蓝牙激活警报对话框”活动。因此,在这种情况下,当方向更改时,“蓝牙激活警报对话框”活动将完成并且newel创建(NOT DUPLICATED):
参考 http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY
答案 2 :(得分:0)
(你的帖子几乎没有足够的信息,所以我假设在这里...)
我对startActivityForResult不太了解。
如果使用托管的AlertDialog,则不应在onCreate()中执行showDialog()。如果蓝牙东西这样做,你可以尝试不从onCreate()运行上面的代码吗?
答案 3 :(得分:0)
已报告此问题(google issue tracker)但已在6年后开启(使用Android 7.1.2检查)。
不幸的是,标志 FLAG_ACTIVITY_NO_HISTORY 不再有效。我找到的唯一快速解决方法,直到Android团队修复此问题(如果有的话)是锁定活动屏幕方向更改,仅在对话框显示时:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
在
之前调用Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
然后使用
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ENABLE_BT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
super.onActivityResult(requestCode, resultCode, data);
}
关于意图结果。 这是一种临时补救措施,但通常比在BT激活期间显示这个可能的问题更好。