android.view.WindowManager$BadTokenException: невозможно добавить окно android.view.ViewRootImpl$W@3decac7, для этого типа окна отказано в разрешении

У меня есть диспетчер окон внутри широковещательного приемника, и я использую API> 23, поэтому я предоставил разрешение на наложение в основном действии, как показано ниже.

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
        startActivity(myIntent);
    }

После предоставления разрешения также получаю следующую ошибку.

 android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@3decac7 -- permission denied for this window type.

оконный менеджер, используемый в широковещательном приемнике

 WindowManager.LayoutParams params = new 
 WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
                            WindowManager.LayoutParams.MATCH_PARENT,
                            WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG,
                            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                            PixelFormat.TRANSLUCENT);
                    params.gravity= Gravity.CENTER;
                    params.x=0;
                    params.y=0;
                    windowManager.addView(look, params);

также предоставлено разрешение в манифесте.

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

пожалуйста, помогите, как действовать.


person user2269164    schedule 18.07.2017    source источник
comment
stackoverflow.com/questions/32224452/   -  person IntelliJ Amiya    schedule 18.07.2017
comment
@IntelliJAmiya - попробовал вышеуказанное решение, но оно не работает.   -  person user2269164    schedule 18.07.2017


Ответы (1)


У вас неправильный тип макета ( WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG). Вы можете использовать TYPE_APPLICATION_OVERLAY для API >= 26 и TYPE_TOAST для более низкого API. Также вы можете прочитать API-документ WindowManager.LayoutParams, чтобы узнать, какой тип вы можете использовать.

person Davide    schedule 20.10.2017