Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.03.2014, 22:41
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 1  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Question Обработка нажатия Keyboard.BACK в AIR Mobile

Столкнулся с необходимостью возвращать игрока в стартовое меню по нажатию кнопки BACK на андроиде.
Думал повешу слушатель на NativeApplication а потом в обработчике просто будут вызывать e.preventDefaul() и выполнять нужное мне действие. Но не тут то было. Обработчик срабатывает без проблем, но приложение просто закрывается.
Собственно вопрос: как это обойти? Мне не нужно, чтобы оно закрывалось / сворачивалось при первом же клике по кнопке back

Старый 20.03.2014, 23:12
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 2  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Писал пол года назад под AIR, тоже была такая задача. Если проигрывается видео, то выходим в меню.

Код AS3:
NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN, onDownKey, false, 0, true);
 
private function onDownKey(e:KeyboardEvent):void {
 
	if (e.keyCode == Keyboard.BACK) {
		e.preventDefault();
		e.stopImmediatePropagation();
 
		if (_videoPlayer.isPlaying) {
			// возврат в меню
		} else {
			exitApp();
		}
	}
}

Старый 21.03.2014, 12:50
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Не, этот метод не работает (не понятно для чего там e.stopImmediatePropagation(), но на всякий случай и с ним проверил), приложение закрывается.

Старый 21.03.2014, 13:20
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 4  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Я обрабатываю кнопку Назад на Андоиде так. Во-первых она закрывает любой поп-ап в первую очередь для удобства. Если поп-апов нет, то выводит попап с предупреждением "Действительно хотите выйти? Да/Нет".
Слушатель вешаю на главный спрайт. Вот пример для Старлинга.
Код AS3:
if (Capabilities.manufacturer.indexOf("iOS") == -1) {
				this.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 
}
 
protected function onKeyDown(event:KeyboardEvent):void { 
			if( event.keyCode == Keyboard.BACK ) { 
				event.preventDefault();
				var popups:Boolean = false;
				for (var i:int = 0; i < stage.numChildren; i++) 
				{
					if (PopUpManager.isTopLevelPopUp(stage.getChildAt(i))){
						popups = true;
						PopUpManager.removePopUp(stage.getChildAt(i), true);
					}
				}
				if (!popups) {
					var popup:AlertPanelTwoButtons = new AlertPanelTwoButtons(Main.Loc['EXIT'],Main.Loc['EXIT_TEXT']);
					popup.addEventListener(Event.CLOSE, alertExitClosed);
					PopUpManager.addPopUp(popup);
				}
 
			} 
		}
 
private function alertExitClosed(e:Event):void
		{
			if (String(e.data) == 'ok'){
				NativeApplication.nativeApplication.exit();
			}
		}
__________________
In Code We Trust

Старый 21.03.2014, 13:35
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
У тебя event.preventDefault() срабатывает?
У меня почему-то нет. Сама кнопка-то нормально обрабатывается, но вот preventDefault() обработчику как-будто пофиг. Хотя не удивлюсь, если это опять особенности самсунговского андроида. С ориентацией экрана у него тоже свои траблы есть, на которые пришлось писать костыли

Старый 21.03.2014, 15:05
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 6  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Нормально. И на Самсунге тоже.
Может какие твики ставил.
Проверь на десктопном эмуляторе. Там есть в меню кнопка Back.

Добавлено через 1 минуту
Ctrl + B
__________________
In Code We Trust

Старый 21.03.2014, 15:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Проверь на десктопном эмуляторе. Там есть в меню кнопка Back.
Я знаю. На нем нормально работает все. Твиков никаких не ставил, даже не рутовал. В системе всё, как было с завода. Вот весь код обработчика:
Код AS3:
private function onKeyUp(e:KeyboardEvent):void {
	if (!_startMenu) return;
	if (e.keyCode == Keyboard.BACK) {
		e.preventDefault();
		e.stopImmediatePropagation();
		if (_startMenu.parent == null) {
			trace("IF CODE WORKED"); // это трейсится
			showStartMenu();
		} else {
			trace("ELSE CODE WORKED");
			NativeApplication.nativeApplication.exit();
		}
	}
}
Самое интересное, что срабатывает блок if, после чего игра закрывается. Вот это мне вообще не понятно

Старый 21.03.2014, 16:08
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 8  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Цитата:
Самое интересное, что срабатывает блок if, после чего игра закрывается. Вот это мне вообще не понятно
Может не закрывается, а крэшится? Посмотри процесс в Скоте.
__________________
In Code We Trust

Старый 21.03.2014, 16:34
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Хм.. надо проверить. Вот это мне даже в голову не приходило.
Хотя отладчик то нормально подключен в это время, и ошибок не вылетает

Старый 27.03.2014, 18:25
Flash_nooob вне форума Посмотреть профиль Отправить личное сообщение для Flash_nooob Найти все сообщения от Flash_nooob
  № 10  
Ответить с цитированием
Flash_nooob

Регистрация: Jul 2008
Сообщений: 46
хм) Ситуация обратная, мне НУЖНО закрыть приложение.
NativeApplication.nativeApplication.exit() его убивает, однако в списке запущенных приложение продолжает висеть с последним открытым экраном, однако при попытке вызвать это злополучное приложение, не восстанавливает его, а запускает с нуля, это почему так может быть?

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:01.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.