Проблема: у меня есть приложение для скриншотов, которое использует плавающий накладной сервис для элементов управления и экранный API-интерфейс Media Media Manager для доступа к экрану. Иногда, когда устройство мало на памяти, Android перезагружает службу, и я теряю медиапроекцию.
Единственный способ узнать новую медиапроекцию - снова открыть Activity, запрашивающий разрешения, и это будет конец, за исключением одной проблемы. Некоторые приложения, в частности игры, похоже, слушают, когда они теряют процесс переднего плана, пауза или иначе reset. Это раздражает.
Вот мой идеальный сценарий. Служба открывается, если пользователь выбрал "проверять не спрашивать меня снова" в диалоговом окне запроса на запрос, он получает медиапроекцию таким образом, чтобы не нарушать текущую активность переднего плана.
Как получить менеджер медиапроекции без нарушения текущего процесса переднего плана?
Есть ли способ получить медиапроекцию из прямой службы или способ открыть активность в фоновом режиме из службы?
В настоящее время я использую этот код в Activity, чтобы получить менеджер медиапроекции
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void getScreenShotPermission() {
if(isLollipopOrNewer) {
mediaProjectionManager = (MediaProjectionManager) getContext().getSystemService(MEDIA_PROJECTION_SERVICE);
startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), 1);
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
this.finish();
}
}
}