Приложение Android с внешним дисплеем не работает ⇐ Android
Приложение Android с внешним дисплеем не работает
У меня есть приложение для Android, которое запускает одно веб-просмотр на главном экране, и если оно обнаруживает второй дисплей, оно запускает другое веб-просмотр.
пакет com.kwickpos.android; импортировать android.Manifest; импортировать android.annotation.TargetApi; импортировать android.app.Activity; импортировать android.app.Presentation; импортировать android.content.Context; импортировать android.media.MediaRouter; импортировать android.media.MediaRouter.RouteInfo; импортировать android.media.MediaRouter.SimpleCallback; импортировать android.os.Build; импортировать android.os.Bundle; импортировать android.util.Log; импортировать android.view.Display; импортировать android.view.View; импортировать android.view.Window; импортировать android.view.WindowManager; импортировать android.webkit.WebView; импортировать android.webkit.WebViewClient; импортировать android.content.pm.PackageManager; публичный класс MainActivity расширяет Activity { Маршрутизатор MediaRouter = null; Презентация preso=null; SimpleCallback cb = null; частный WebView wv; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().getDecorView().setSystemUiVisibility( Просмотр.SYSTEM_UI_FLAG_LAYOUT_STABLE | Просмотр.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); setContentView(R.layout.activity_main); wv = findViewById(R.id.webView); //wv = findViewById(R.id.webView2); wv.getSettings().setJavaScriptEnabled(истина); wv.getSettings().setDomStorageEnabled(истина); wv.getSettings().setSupportMultipleWindows(истина); wv.setWebViewClient(новый WebViewClient() { @Override public boolean mustOverrideUrlLoading (представление WebView, URL-адрес строки) { view.loadUrl(url); вернуть истину; } }); wv.loadUrl("https://www.google.com/"); // Проверяем разрешение SYSTEM_ALERT_WINDOW на Android 12 если (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && checkSelfPermission(Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) { // Возможно, вам придется запросить это разрешение у пользователя requestPermissions(new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, 1); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @Override защищенный недействительный onStart() { супер.онСтарт(); getWindow().getDecorView().setSystemUiVisibility( Просмотр.SYSTEM_UI_FLAG_LAYOUT_STABLE | Просмотр.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { если (cb==null) { cb = новый RouteCallback (); маршрутизатор = (MediaRouter) getSystemService (MEDIA_ROUTER_SERVICE); } handleRoute(router.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO)); router.addCallback(MediaRouter.ROUTE_TYPE_LIVE_VIDEO, cb); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @Override защищенная пустота onStop() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { ОчиститьПресо(); если (маршрутизатор != ноль) { router.removeCallback(cb); } } //очищаем кеш и историю *исправляет ошибку, при которой полюс.php запускался при новой установке приложения wv.clearCache(истина); wv.clearHistory(); супер.онСтоп(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) частный недействительный handleRoute (маршрут RouteInfo) { если (маршрут == ноль) { ОчиститьПресо(); } еще { Дисплей display=route.getPresentationDisplay(); если (route.isEnabled() && дисплей != ноль) { если (пресо == ноль) { showPreso (маршрут); Log.d(getClass().getSimpleName(), "включенный маршрут"); } иначе if (preso.getDisplay().getDisplayId() != display.getDisplayId()) { ОчиститьПресо(); showPreso (маршрут); Log.d(getClass().getSimpleName(), "переключенный маршрут"); } еще { // неактивен: уже должно быть установлено } } еще { ОчиститьПресо(); Log.d(getClass().getSimpleName(), "отключенный маршрут"); } } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) частный недействительный ClearPreso() { если (предварительно != ноль) { пресо.отклонить(); пресо = ноль; } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) частный недействительный showPreso (маршрут RouteInfo) { preso = новый DifferentDisplay(this,route.getPresentationDisplay()); //preso.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); preso.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, WindowManager.LayoutParams.FLAG_SPLIT_TOUCH); пресо.шоу(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) частный класс RouteCallback расширяет SimpleCallback { @Override public void onRoutePresentationDisplayChanged (маршрутизатор MediaRouter, маршрут RouteInfo) { handleRoute (маршрут); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) публичный класс DifferentDisplay расширяет презентацию { public DifferentDisplay (Context ctxt, Display display) { супер(ctxt, дисплей); } @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.display1); WebView wv = findViewById(R.id.webView1); //wv.setVisibility(View.VISIBLE); wv.getSettings().setJavaScriptEnabled(истина); wv.getSettings().setDomStorageEnabled(истина); wv.getSettings().setSupportMultipleWindows(истина); wv.setWebViewClient(новый WebViewClient() { @Override public boolean mustOverrideUrlLoading (представление WebView, URL-адрес строки) { view.loadUrl(url); вернуть истину; } }); wv.loadUrl("https://www.google.com/"); } } } Этот код работает нормально, когда я запускаю APK на устройстве Android версии 9, но когда я запускаю его на устройстве Android версии 12, он загружает оба веб-просмотра, но вообще не позволяет мне взаимодействовать с экраном. Я тоже не могу выйти из приложения. Единственный способ выйти — перезагрузить компьютер Android. Если я удалю второй/внешний дисплей для версии Android 12, все будет работать нормально.
У меня есть приложение для Android, которое запускает одно веб-просмотр на главном экране, и если оно обнаруживает второй дисплей, оно запускает другое веб-просмотр.
пакет com.kwickpos.android; импортировать android.Manifest; импортировать android.annotation.TargetApi; импортировать android.app.Activity; импортировать android.app.Presentation; импортировать android.content.Context; импортировать android.media.MediaRouter; импортировать android.media.MediaRouter.RouteInfo; импортировать android.media.MediaRouter.SimpleCallback; импортировать android.os.Build; импортировать android.os.Bundle; импортировать android.util.Log; импортировать android.view.Display; импортировать android.view.View; импортировать android.view.Window; импортировать android.view.WindowManager; импортировать android.webkit.WebView; импортировать android.webkit.WebViewClient; импортировать android.content.pm.PackageManager; публичный класс MainActivity расширяет Activity { Маршрутизатор MediaRouter = null; Презентация preso=null; SimpleCallback cb = null; частный WebView wv; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().getDecorView().setSystemUiVisibility( Просмотр.SYSTEM_UI_FLAG_LAYOUT_STABLE | Просмотр.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); setContentView(R.layout.activity_main); wv = findViewById(R.id.webView); //wv = findViewById(R.id.webView2); wv.getSettings().setJavaScriptEnabled(истина); wv.getSettings().setDomStorageEnabled(истина); wv.getSettings().setSupportMultipleWindows(истина); wv.setWebViewClient(новый WebViewClient() { @Override public boolean mustOverrideUrlLoading (представление WebView, URL-адрес строки) { view.loadUrl(url); вернуть истину; } }); wv.loadUrl("https://www.google.com/"); // Проверяем разрешение SYSTEM_ALERT_WINDOW на Android 12 если (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && checkSelfPermission(Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) { // Возможно, вам придется запросить это разрешение у пользователя requestPermissions(new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, 1); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @Override защищенный недействительный onStart() { супер.онСтарт(); getWindow().getDecorView().setSystemUiVisibility( Просмотр.SYSTEM_UI_FLAG_LAYOUT_STABLE | Просмотр.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_HIDE_NAVIGATION | Просмотр.SYSTEM_UI_FLAG_FULLSCREEN | Просмотр.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { если (cb==null) { cb = новый RouteCallback (); маршрутизатор = (MediaRouter) getSystemService (MEDIA_ROUTER_SERVICE); } handleRoute(router.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO)); router.addCallback(MediaRouter.ROUTE_TYPE_LIVE_VIDEO, cb); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @Override защищенная пустота onStop() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { ОчиститьПресо(); если (маршрутизатор != ноль) { router.removeCallback(cb); } } //очищаем кеш и историю *исправляет ошибку, при которой полюс.php запускался при новой установке приложения wv.clearCache(истина); wv.clearHistory(); супер.онСтоп(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) частный недействительный handleRoute (маршрут RouteInfo) { если (маршрут == ноль) { ОчиститьПресо(); } еще { Дисплей display=route.getPresentationDisplay(); если (route.isEnabled() && дисплей != ноль) { если (пресо == ноль) { showPreso (маршрут); Log.d(getClass().getSimpleName(), "включенный маршрут"); } иначе if (preso.getDisplay().getDisplayId() != display.getDisplayId()) { ОчиститьПресо(); showPreso (маршрут); Log.d(getClass().getSimpleName(), "переключенный маршрут"); } еще { // неактивен: уже должно быть установлено } } еще { ОчиститьПресо(); Log.d(getClass().getSimpleName(), "отключенный маршрут"); } } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) частный недействительный ClearPreso() { если (предварительно != ноль) { пресо.отклонить(); пресо = ноль; } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) частный недействительный showPreso (маршрут RouteInfo) { preso = новый DifferentDisplay(this,route.getPresentationDisplay()); //preso.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); preso.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, WindowManager.LayoutParams.FLAG_SPLIT_TOUCH); пресо.шоу(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) частный класс RouteCallback расширяет SimpleCallback { @Override public void onRoutePresentationDisplayChanged (маршрутизатор MediaRouter, маршрут RouteInfo) { handleRoute (маршрут); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) публичный класс DifferentDisplay расширяет презентацию { public DifferentDisplay (Context ctxt, Display display) { супер(ctxt, дисплей); } @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.display1); WebView wv = findViewById(R.id.webView1); //wv.setVisibility(View.VISIBLE); wv.getSettings().setJavaScriptEnabled(истина); wv.getSettings().setDomStorageEnabled(истина); wv.getSettings().setSupportMultipleWindows(истина); wv.setWebViewClient(новый WebViewClient() { @Override public boolean mustOverrideUrlLoading (представление WebView, URL-адрес строки) { view.loadUrl(url); вернуть истину; } }); wv.loadUrl("https://www.google.com/"); } } } Этот код работает нормально, когда я запускаю APK на устройстве Android версии 9, но когда я запускаю его на устройстве Android версии 12, он загружает оба веб-просмотра, но вообще не позволяет мне взаимодействовать с экраном. Я тоже не могу выйти из приложения. Единственный способ выйти — перезагрузить компьютер Android. Если я удалю второй/внешний дисплей для версии Android 12, все будет работать нормально.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение