Как получить диспетчер проекции мультимедиа, не нарушая текущий приоритетный процесс, кроме как запросить разрешение?
Проблема: у меня есть приложение для создания снимков экрана, которое использует плавающую службу наложения для элементов управления и API-интерфейс Media Media Manager для скрининга экрана для получения доступа к экрану. Иногда, когда на устройстве недостаточно памяти, Android перезапускает службу, и я теряю медиапроекцию.
Единственный известный мне способ получения новой медиапроекции - это повторно открыть действие, запрашивающее разрешения, и на этом все закончится, за исключением одной проблемы. Некоторые приложения, в частности игры, похоже, прислушиваются к моменту, когда теряют приоритетный процесс, и останавливаются или сбрасываются иным образом. Это раздражает.
Вот мой идеальный сценарий. Служба открывается, если в диалоговом окне запроса разрешения пользователь выбрал «отмечено, не спрашивать меня снова», он получает проекцию мультимедиа таким образом, чтобы это не мешало текущей активности на переднем плане.
Как получить диспетчер проекции мультимедиа, не нарушая текущий приоритетный процесс?
Есть ли способ получить медиапроекцию из прямой службы или способ открыть активность в фоновом режиме из службы?
В настоящее время я использую этот код в 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();
}
}
}