Я исправляю не разработанное мной приложение для Android, несколько дней назад клиент попросил меня установить targetSdkVersion на 26 (до 14), после того как я заметил, что приложение в некоторых случаях падает, дляпример вылетает, когда отображается ProgressDialog.Это часть кода с этой проблемой:
mProgressDialog.setTitle(getString(R.string.downloading_data));
mProgressDialog.setMessage(mAlertMsg);
Drawable icon = getActivity().getDrawable(android.R.drawable.ic_dialog_info);
icon.setColorFilter(Color.parseColor("#00cbac"), PorterDuff.Mode.SRC_ATOP);
mProgressDialog.setIcon(icon);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setCancelable(false);
mProgressDialog.setButton(getString(R.string.cancel), loadingButtonListener);
mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mProgressDialog.show();
Когда выполняется последняя строка, приложение вылетает и появляется эта ошибка в Logcat:
android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@b784d3a -- permission denied for window type 2003
Эта проблема возникает, когдаприложение работает на устройствах с Android 8 и 9. Я искал решения для подобных проблем и обнаружил, что было бы лучше использовать WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
вместо TYPE_SYSTEM_ALERT
, а затем изменил вторую последнюю строку кодаЯ писал в этом посте, но это ничего не меняет, приложение вылетает так же, и в журнале появляется эта ошибка:
android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@b784d3a -- permission denied for window type 2038
В Манифесте у меня есть разрешение:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Я также включил все разрешения приложения из настроек устройства.Как я могу решить эту проблему?