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

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

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

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

как закрыть приложение? какой метод это делает? пользую finish(); но он закрывает только текущую активити, а как выйти совсем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 17:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как закрывать приложение? (Программирование Android):

Как красиво закрывать приложение?
Здравствуйте! Столкнулся с проблемой: если я закрываю своё приложение при...

Как открывать/закрывать NavigationDrawer кнопкой "Menu"
собсно и вопрос в этом, где и что повесить на хардварную кнопку меню чтоб...

Допиленное узкоспециализированное приложение или неповоротливое многофункциональное приложение?
Если вопрос про "что нужно знать?" висит, то и этот должен зайти. Появилась...

Узнать приложение которое запустило моё приложение
Приветствую всех! Помогите разобраться. Есть ли возможность узнать, что за...

Как отредактировать приложение?
Привет всем, зарегистрировался на вашем форуме столько информации тут глаза...

Как защитить приложение?
*.apk без проблем открывается винраром, *.dex, содержащий весь код, также легко...

16
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2012, 18:15 #2
а зачем?
0
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
01.11.2012, 18:53  [ТС] #3
Вообще хороший вопрос) хотел в менюшке каждой активити реализовать кнопку выход.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
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();
Проверка, если пришла метка закрытия, то закрываемся
1
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2012, 19:54 #5
обычно когда есть кнопка аля выход, после ее нажатия открывается аля логин активити. в других случаях не вижу смысла в этой кнопке, у юзера всегда есть кнопка бек и хом.
0
mks81
7 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 51
01.11.2012, 20:04 #6
Что подразумевается под "закрыть приложение", остановить все активити, службы и потоки? У каждого из них есть свой метод)
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
01.11.2012, 23:14 #7
Мне кажется, что проще всего генерить широковещательное намерение и в каждой активити на него зарегить свой BroadcastReciever, который для каждой активити будет вызывать finish()

А если активити только 2, то можно юзать startActivityForResult и по получении определенного ответа от 2-ой активити закрывать првую
1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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.
0
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
02.11.2012, 18:34  [ТС] #9
Лодно, всем спасибо, легче действительно забить на эту кнопку, хоумом выйдут)) я просто надеялся, что есть нечто вроди application.close(); ну или как то так))
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 18:52 #10
каждое активити независимо, можно даже с одного апликейшена запускать активити другого апликейшина и получить какой то результат работы этого активити обратно в первый апликейшен, поэтом реализовывать метода аля application.close() не совсем коректно.
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 87
11.12.2012, 15:29 #11
Меня добил вопрос "А зачем?" Если человек спрашивает, значит надо
0
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 в андройде - плохой стиль.
0
Миниатюры
Как закрывать приложение?  
Vladimirys
312 / 209 / 27
Регистрация: 16.01.2010
Сообщений: 610
11.12.2012, 21:28 #13
Цитата Сообщение от YAUHEN Посмотреть сообщение
есть определённые практики и на сколько я знаю, exit button в андройде - плохой стиль.
Парняга на картинке, явно себя об этом не спрашивал. А если и спрашивал, то тут же убеждал себя в том, что уже он её, точно не делает.
По сути никто не запрещает. То же "андроид мануал" бесконечно информирует о том, что нужно использовать только стандартный UI( для кого его спрашиваться делали - мучилась?). Но народ упорно, придумывают "свои кнопочки". И прочую самодеятельность. А потом юзвери, их (самоделкиных интерфейса) клянут за тормоза. Кстати говоря, возмущений юзеров, по поводу наличия кнопки - Выход, не видел.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.12.2012, 03:01 #14
юзеры просто жмут хом и даже не ищут кнопки выход. если и есть кнопка выход, то под ней подразумевается логаут а не закрытие апликейшина.
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 87
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.
0
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
12.12.2012, 11:15 #16
Цитата Сообщение от KODAGEN Посмотреть сообщение
android.os.NetworkOnMainThreadException
попробуйте слать письмо не из UI потока
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 87
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();
            }
0
12.12.2012, 15:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 15:17
Привет! Вот еще темы с решениями:

Как защитить приложение
Доброго времени суток! Пишу диплом тесно связанный с безопасностью....

Как оптимизировать приложение?
При загрузке apk-файла в google play выдает ошибку==&gt;Архив APK-файла не...

Как привязать приложение к ВК?
Помогите пожалуйста,мне нужно что-бы приложение делало пост автоматически....

Как запустить приложение?
Здравствуйте, помогите разобраться пожалуйста, я скачала JDK, Eclipse, и...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru