屏幕旋转后蓝牙激活警报对话框倍增

我遇到了奇怪的问题。 从Activity onStart()我通过意向请求蓝牙激活和120s可发现性:

Intent activateBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivityForResult(activateBTIntent, BT_ACTIVATE_INTENT);                                   

无论蓝牙是否已经启动,我都会使用它。 Android文档说,如果没有,蓝牙将被激活,并且工作正常。 在这两种情况下,我都会收到系统警报对话

在这里输入图像描述

当我旋转屏幕时,我观察到闪烁。 按是/否删除一个对话框,但下面还有一个对话框。 执行屏幕旋转我可以得到一堆警报对话框,并且必须按每个上的是/否来摆脱它们。

只有当发送意图时蓝牙尚未启动,才会出现所描述的问题,否则它会正常工作。 尝试在不同的2.2手机上,问题是存在的。 在我看来,像Android系统问题。

有没有人遇到它,也许有一些有用的提示如何避免这种情况?

感谢致敬。


这是导致此问题的设置应用程序中的一个错误。 RequestPermissionActivity在循环中复制RequestPermissionHelperActivity的实例。


我面临同样的问题。 花了很多时间后,我找到了一个解决方案。

您可以通过为activateBTIntent使用FLAG_ACTIVITY_NO_HISTORY标志来避免重复“蓝牙激活警报对话框”。 但设置此标志将使startActivityForResult无法使用

代码 -

Intent activateBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
activateBTIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(activateBTIntent);

使用带有activateBTIntent的FLAG_ACTIVITY_NO_HISTORY将从历史堆栈中删除“蓝牙激活警报对话框”活动。 因此,在这种情况下,当方向改变时,'蓝牙激活警报对话'活动将完成并且newel创建(不重复):

参考http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY


(你的帖子几乎没有足够的信息,所以我假设在这里......)

我不太了解startActivityForResult。

如果您使用托管AlertDialog,则不应在onCreate()中执行showDialog()。 如果蓝牙thingy这样做,你可以尝试不从onCreate()运行上述代码?

链接地址: http://www.djcxy.com/p/4573.html

上一篇: Bluetooth activation Alert dialog multiplication after screen rotation

下一篇: Pretty printing math in C# desktop application