Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bluetooth activation Alert dialog multiplication after screen rotation

Tags:

android

I have encountered strange issue. From Activity onStart() I request Bluetooth activation and 120s discoverability via intent:

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

I use it no matter if the Bluetooth is already activated or not. Android documentation says that Bluetooth will be activated if it was not, and that works fine. In both cases I get system Alert dialog

enter image description here

When I rotate the screen I observe flickering. Press on Yes/No removes one dialog, but there is still another one below. Performing screen rotation I can get a pile of Alert dialogs, and have to press Yes/No on each to get rid of them.

Described issue is present only if Bluetooth was not already started when intent was sent, otherwise it works correctly. Tried on different 2.2 phones, and issue is present on all. Looks to me like Android system issue.

Has anybody encountered it also, and maybe have some useful hint how to avoid this?

Thanks and regards.

like image 797
Zelimir Avatar asked Feb 02 '11 10:02

Zelimir


2 Answers

This is a bug in the Settings app that causes this. The RequestPermissionActivity is duplicating its instance of RequestPermissionHelperActivity on rotations.

like image 143
cyngus Avatar answered Oct 11 '22 08:10

cyngus


I was facing the same problem. After spending lots of time with it, i have found one solution.

You can avoid the duplication of the 'Bluetooth activation Alert dialog' by using FLAG_ACTIVITY_NO_HISTORY flag for activateBTIntent. But setting this flag will make startActivityForResult unusable.

The code -

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

Using FLAG_ACTIVITY_NO_HISTORY with activateBTIntent will remove the 'Bluetooth activation Alert dialog' activity from the history stack. Thus in this case, when orientation is changed, the 'Bluetooth activation Alert dialog' activity will be finished and newel created(NOT DUPLICATED):

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

like image 38
Vivek Avatar answered Oct 11 '22 06:10

Vivek