Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.80
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
#1

Как закрывать приложение? - Android

01.11.2012, 17:52. Просмотров 5841. Ответов 16
Метки нет (Все метки)

Заранее извеняюсь за глупый вопрос, но чет не могу найти ответа, или не так задаю вопрос гуглу))

как закрыть приложение? какой метод это делает? пользую finish(); но он закрывает только текущую активити, а как выйти совсем?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2012, 18:15     Как закрывать приложение? #2
а зачем?
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
01.11.2012, 18:53  [ТС]     Как закрывать приложение? #3
Вообще хороший вопрос) хотел в менюшке каждой активити реализовать кнопку выход.
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
01.11.2012, 19:05     Как закрывать приложение? #4
На примере двух Activity: MainActivity и SecondActivity

Стартовое(корневое) - MainActivity. Из него вызывается SecondActivity.

В SecondActivity есть некая кнопка "выход". На ее нажатие вешаем:
Java
1
2
3
4
5
6
7
Intent intent = new Intent(this, MainActivity.class);
 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
intent.putExtra("finish", true);
 
startActivity(intent);
Этот код вызывает MainActivity и чистит весь стек над ним. И посылаем метку закрытия


В MainActivity в onCreate сразу после конструктора суперкласса пишем
Java
1
if (getIntent().getBooleanExtra("finish", false)) finish();
Проверка, если пришла метка закрытия, то закрываемся
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2012, 19:54     Как закрывать приложение? #5
обычно когда есть кнопка аля выход, после ее нажатия открывается аля логин активити. в других случаях не вижу смысла в этой кнопке, у юзера всегда есть кнопка бек и хом.
mks81
7 / 7 / 0
Регистрация: 12.10.2012
Сообщений: 51
01.11.2012, 20:04     Как закрывать приложение? #6
Что подразумевается под "закрыть приложение", остановить все активити, службы и потоки? У каждого из них есть свой метод)
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
01.11.2012, 23:14     Как закрывать приложение? #7
Мне кажется, что проще всего генерить широковещательное намерение и в каждой активити на него зарегить свой BroadcastReciever, который для каждой активити будет вызывать finish()

А если активити только 2, то можно юзать startActivityForResult и по получении определенного ответа от 2-ой активити закрывать првую
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.11.2012, 11:46     Как закрывать приложение? #8
android.os.Process.killProcess (int pid)

References
Кликните здесь для просмотра всего текста
public static final void killProcess (int pid)
Added in API level 1

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
02.11.2012, 18:34  [ТС]     Как закрывать приложение? #9
Лодно, всем спасибо, легче действительно забить на эту кнопку, хоумом выйдут)) я просто надеялся, что есть нечто вроди application.close(); ну или как то так))
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 18:52     Как закрывать приложение? #10
каждое активити независимо, можно даже с одного апликейшена запускать активити другого апликейшина и получить какой то результат работы этого активити обратно в первый апликейшен, поэтом реализовывать метода аля application.close() не совсем коректно.
KODAGEN
2 / 0 / 1
Регистрация: 22.11.2009
Сообщений: 80
11.12.2012, 15:29     Как закрывать приложение? #11
Меня добил вопрос "А зачем?" Если человек спрашивает, значит надо
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
11.12.2012, 15:55     Как закрывать приложение? #12
Цитата Сообщение от KODAGEN Посмотреть сообщение
Меня добил вопрос "А зачем?" Если человек спрашивает, значит надо
не факт что надо.
http://blog.radioactiveyak.com/2010/05/when-to-include-exit-button-in-android.html
есть определённые практики и на сколько я знаю, exit button в андройде - плохой стиль.
Миниатюры
Как закрывать приложение?  
Vladimirys
297 / 194 / 21
Регистрация: 16.01.2010
Сообщений: 548
11.12.2012, 21:28     Как закрывать приложение? #13
Цитата Сообщение от YAUHEN Посмотреть сообщение
есть определённые практики и на сколько я знаю, exit button в андройде - плохой стиль.
Парняга на картинке, явно себя об этом не спрашивал. А если и спрашивал, то тут же убеждал себя в том, что уже он её, точно не делает.
По сути никто не запрещает. То же "андроид мануал" бесконечно информирует о том, что нужно использовать только стандартный UI( для кого его спрашиваться делали - мучилась?). Но народ упорно, придумывают "свои кнопочки". И прочую самодеятельность. А потом юзвери, их (самоделкиных интерфейса) клянут за тормоза. Кстати говоря, возмущений юзеров, по поводу наличия кнопки - Выход, не видел.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.12.2012, 03:01     Как закрывать приложение? #14
юзеры просто жмут хом и даже не ищут кнопки выход. если и есть кнопка выход, то под ней подразумевается логаут а не закрытие апликейшина.
KODAGEN
2 / 0 / 1
Регистрация: 22.11.2009
Сообщений: 80
12.12.2012, 11:13     Как закрывать приложение? #15
Просто у меня такая же проблема. Мне надо отправить письмо со своей программы, уже жне недели бьюсь над этой проблемой. И одно из пробных решений было использование Intent. Открывается Gmail, но вот как сделать чтоб он отправил и сам при этом закрылся, не написано, то смысла в таком решении я не вижу.

Одно из вариантов моего решения есть следующий код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void send(String from, String to, String subject,
            String content) throws AddressException, MessagingException {
 
             java.util.Properties props = System.getProperties();
             props.put("mail.smtp.starttls.enable", "true");
             javax.mail.Session session = javax.mail.Session.getDefaultInstance(props, null);
 
             Message msg = new MimeMessage(session);
             msg.setFrom(new InternetAddress(from));
             msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
             msg.setSubject(subject);
             msg.setText(content);
             msg.setHeader("Content-type", "text/html; charset=UTF-8");
 
             Transport tr = session.getTransport("smtp");
             tr.connect("smtp.gmail.com", 587, "мой логин", "мой пароль");
    //       msg.saveChanges();      // don't forget this
        //   tr.sendMessage(msg, msg.getAllRecipients());
        //   tr.close();
            }
но в
Java
1
tr.connect("smtp.gmail.com", 587, "мой логин", "мой пароль");
вылетает ексепшин

12-12 07:05:25.141: D/gralloc_goldfish(1152): Emulator without GPU emulation detected.
12-12 07:05:30.001: D/AndroidRuntime(1152): Shutting down VM
12-12 07:05:30.001: W/dalvikvm(1152): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
12-12 07:05:30.091: E/AndroidRuntime(1152): FATAL EXCEPTION: main
12-12 07:05:30.091: E/AndroidRuntime(1152): java.lang.IllegalStateException: Could not execute method of the activity
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View$1.onClick(View.java:3039)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View.performClick(View.java:3480)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View$PerformClick.run(View.java:13983)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.Handler.handleCallback(Handler.java:605)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.Handler.dispatchMessage(Handler.java:92)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.Looper.loop(Looper.java:137)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.app.ActivityThread.main(ActivityThread.java:4340)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invoke(Method.java:511)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-12 07:05:30.091: E/AndroidRuntime(1152): at dalvik.system.NativeStart.main(Native Method)
12-12 07:05:30.091: E/AndroidRuntime(1152): Caused by: java.lang.reflect.InvocationTargetException
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invoke(Method.java:511)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View$1.onClick(View.java:3034)
12-12 07:05:30.091: E/AndroidRuntime(1152): ... 11 more
12-12 07:05:30.091: E/AndroidRuntime(1152): Caused by: android.os.NetworkOnMainThreadException
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetAddress.getByName(InetAddress.java:295)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetSocketAddress.<init>(InetSocketAddress.java:105)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetSocketAddress.<init>(InetSocketAddress.java:90)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
12-12 07:05:30.091: E/AndroidRuntime(1152): at javax.mail.Service.connect(Service.java:288)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.example.testemail2.MainActivity.send(MainActivity.java:68)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.example.testemail2.MainActivity.SendEmail(MainActivity.java:44)
12-12 07:05:30.091: E/AndroidRuntime(1152): ... 14 more
12-12 07:05:32.183: I/Process(1152): Sending signal. PID: 1152 SIG: 9
12-12 07:07:37.281: D/gralloc_goldfish(1198): Emulator without GPU emulation detected.
12-12 07:07:40.861: I/InputQueue-JNI(1198): Sending finished signal for input channel '412e7e10 Packing List (client)' since it is being unregistered while an input message is still in progress.
12-12 07:07:40.951: I/InputQueue-JNI(1198): Ignoring finish signal on channel that is no longer registered.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
12.12.2012, 11:15     Как закрывать приложение? #16
Цитата Сообщение от KODAGEN Посмотреть сообщение
android.os.NetworkOnMainThreadException
попробуйте слать письмо не из UI потока
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 15:17     Как закрывать приложение?
Еще ссылки по теме:

Android Как привязать приложение к ВК?
Android Узнать приложение которое запустило моё приложение
Android Как открывать/закрывать NavigationDrawer кнопкой "Menu"
Как красиво закрывать приложение? Android
Допиленное узкоспециализированное приложение или неповоротливое многофункциональное приложение? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KODAGEN
2 / 0 / 1
Регистрация: 22.11.2009
Сообщений: 80
12.12.2012, 15:17     Как закрывать приложение? #17
Вы были правы, получилось, вот теперь ещё бы сюда как-то вложить файл, и разобраться бы с получением почты в котором, файлик лежит ))

Добавлено через 3 часа 48 минут
С вложением файлика разобрался )) Теперь осталось получение почты ))

Кому интересно вот код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void send(final String from, final String to, final String subject,
            final String content) throws AddressException, MessagingException {
            java.util.Properties props = System.getProperties();
             props.put("mail.smtp.starttls.enable", "true");
             final javax.mail.Session session = javax.mail.Session.getDefaultInstance(props, null);
             new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Transport tr;
                        String file_name = "имя файла";
                        try {
                            //Прикрепление файла
                            BodyPart messageBodyPart = new MimeBodyPart();
                            DataSource source = new FileDataSource(file_name);
                            messageBodyPart.setDataHandler( new DataHandler(source));
                            messageBodyPart.setFileName(имя файла, которое прийдет на почту);
                            //////////////////////////////
                             MimeBodyPart messagePart = new MimeBodyPart();
                             messagePart.setText(content);
                             MimeMultipart multipart = new MimeMultipart("mixed");
                             multipart.addBodyPart(messagePart);
                             multipart.addBodyPart(messageBodyPart);
                             ////////////////
                             MimeMessage msg = new MimeMessage(session);
                             msg.setFrom(new InternetAddress(from));
                             msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                             msg.setSubject(subject);
                             msg.setContent(multipart);
                            tr = session.getTransport("smtp");
                            tr.connect("smtp.gmail.com", 587, "мой логин", "пароль");
                            msg.saveChanges();
                            tr.sendMessage(msg, msg.getAllRecipients());
                            tr.close();
                        } catch (NoSuchProviderException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (MessagingException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
Yandex
Объявления
12.12.2012, 15:17     Как закрывать приложение?
Ответ Создать тему
Опции темы

Текущее время: 04:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru