Ну, проблема была в том, что я звонил startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
каждый раз, что не нужно (createScreenCaptureIntent()
приводит к диалоговому окну, которое запрашивает взаимодействие с пользователем). Мое решение заставляет диалоговое окно появляться только один раз (если приложение было закрыто, оно будетпопросить разрешения еще раз).Все, что мне нужно было сделать, это создать дополнительные частные статические переменные типа Intent и int.
private static Intent staticIntentData;
private static int staticResultCode;
В результате действия Activity я присваиваю эти переменные с переданным кодом результата и намерением:
if(staticResultCode == 0 && staticIntentData == null) {
sMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
staticIntentData = data;
staticResultCode = resultCode;
} else {
sMediaProjection =
mProjectionManager.getMediaProjection(staticResultCode, staticIntentData)};
}
Каждый раз, когда я вызываю метод startprojection, я проверяю, равны ли они нулю:
if(staticIntentData == null)
startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
else
captureScreen();
Если значение равно нулю, он запросит разрешение, если нет, то запустит проекцию со статическими данными намерений и статическим кодом результата int, поэтому нет необходимости запрашивать это разрешение снова,просто используйте то, что вы получаете в результате действия.
sMediaProjection = mProjectionManager.getMediaProjection(staticResultCode, staticIntentData);
Просто!Теперь он будет отображаться только один раз каждый раз, когда вы используете приложение.Я думаю, это то, чего хочет Google, потому что в этом диалоговом окне нет флажка держать решение, как в предыдущих версиях Android.