Зефир Рисовать поверх других приложений
Мы работаем над разрешением "Рисовать поверх других приложений", чтобы разработать классную функцию для нашего приложения на "Зефире".
Новая функция нашего приложения прекрасно работала с самой первой установкой нашего приложения. У нас не было проблем с разрешением "Рисовать поверх других приложений".
Однако наш кошмар начался, когда наше приложение было стерто и переустановлено или обновлено с более новой версией. Новая функция вообще не работала и вообще не было сообщений об ошибках.
Когда мы проверили статус "Рисовать поверх других приложений", он был активирован. Это означало, что наша новая функция должна была работать, но это не так.
Но как только мы обновили статус "Рисовать поверх других приложений" с неактивированного на активированный, даже если он уже был "активирован", новая функция снова заработала отлично.
Мы не думаем, что можем попросить пользователей обновлять "Рисовать поверх других приложений" вручную при каждом обновлении или переустановке.
Любая помощь будет оценена. Кто-нибудь?
1.Деятельность - 2.Сервис (PopupWindow)
3.PermissionOverlay Activity
2.Service
public void runPopup() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(!Settings.canDrawOverlays(getBaseContext())) {
setOverlayPermission();
return;
}
}
// other working..
}
public void setOverlayPermission() {
Runnable myRunnable = new Runnable() {
@Override
public void run() {
new PermPermission(instance)
.setPermissionListener(hecpermissionlistener)
.setDeniedMessage("The necessary permissions!")
.setPermissions(android.Manifest.permission.SYSTEM_ALERT_WINDOW)
.check();
}
};
grantHandler.post(myRunnable);
}
3.PermissionOverlay Activity
public void requestPermissions(ArrayList<String> needPermissions) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + packageName));
startActivityForResult(intent, REQ_CODE_REQUEST_SETTING);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQ_CODE_REQUEST_SETTING:
checkPermissions(true);
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}