Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.254.231] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Подхожу к финальной стадии разработки своего приложения для заказа такси. Уже работает SMS-регистрация, но шеф после тестирования отметил парочку нюансов. Данная тем посвящена вопросу, как разобраться с одним из них. Уже зарегистрированный пользователь, который уже некоторое время проработал с приложением, может пожелать получить новый код регистрации по SMS. Это нужно, в частности, в такой ситуации. Система разрешает работать под одним и тем же аккаунтом на разных устройствах, допустим, на смартфоне, и на планшете, для этого и там и там в форме регистрации нужно указать для номера телефона один и тот же код регистрации, полученный по SMS. Например, я отдал свой планшет знакомому, но не подчистил на нем за собой, осталась рабочая установка программы. Но я хочу исключить возможность того, чтобы этот знакомый мог воспользоваться моим аккаунтом для заказа такси с помощью этого приложения. Ну или еще хуже, я просто потерял устройство. Активность, где можно заказать новый код по SMS вызывается по команде меню из основной активности - формы заказа такси. Если пользователь подтверждает действие заказа нового кода регистрации, то в случае успешной отработки скрипта (высылается SMS) он перебрасывается в форму регистрации, где должен ввести этот новый код. При этом активность, где он заказал этот новый код, уничтожается. Таким образом, получается такой стек активностей: Форма заказа такси -> Форма регистрации На форме заказа такси в это время может находиться какой-то пользовательский ввод, поэтому при успешной регистрации нового кода она просто возвращается на фронт. Для этого для интента я просто ставлю флаг FLAG_ACTIVITY_REORDER_TO_FRONT, при этом, если никакой формы заказа в стеке активностей и не было, например, при первичной регистрации, то просто создается нужная активность, с этим все ок. Но в то же время, если клиент вдруг в форме регистрации решил нажать хардварный НАЗАД, то, как ни в чем не бывало, на фронт опять-таки возвращается та же самая форма заказа. Когда я это делал, то не придал этому особого значения - клиент, пока не подтвердит новый код, может поработать и со старым. Но шефу это не очень понравилось, он ожидал, что при этом приложение закроется. Как такое реализовать меньшими усилиями? Я знаю, что можно повесить обработчик OnKeyUp (ну или как там точно, это уже не суть), в котором можно обработать именно нажатие хардварного НАЗАД и завершить работу всего приложения. Но мне бы хотелось эту задачку решить красиво, с помощью манипуляции со стеком активностей - а именно просто в случае НАЗАД убрать форму регистрации из стека, тогда и произойдет выход из приложения. Долго копался на StackOverflow, но подходящего решения не нашел. |
Сообщ.
#2
,
|
|
|
имхо, может для формы заказа сделать:
не знаю можно ли достать так объект, ClassOrderActivity.this.finish(); или при событии OnStart() анализировать какую-то переменную(ключа регистрации) и там же сделать finish() если не подходит. Добавлено http://stackoverflow.com/questions/7790248...nother-activity |
Сообщ.
#3
,
|
|
|
Решилось довольно просто, но может быть, не очень ортодоксально, что ли. У меня есть класс - модуль с общими данными CommonData, вообще-то это синглтон, но сейчас для простоты я создал в нем статическое поле boolean bFinish. При заходе в форму регистрации оно ставится в true. А в false ставится только в случае успешного завершения действий по регистрации, прямо перед открытием формы заказа. А в форме заказа сделал такую вот проверку.
@Override public void onResume() { super.onResume(); if (CommonData.bFinish) finish(); } Соответственно, если пользователь в форме регистрации, если он заказал новую регистрацию и в стеке активностей форма заказа уже есть, нажимает Назад, то форма заказа просто завершает работу, а так как это единственный на данный момент элемент в стеке активностей, то приложение завершает работу. |