С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
#1

Выполнение различных задач из Service - Программирование Android

15.05.2014, 20:55. Просмотров 849. Ответов 2
Метки нет (Все метки)

Сделал по примеру сервис, который включает в заданное время wi-fi. Сейчас время крутится в цикле, на сколько это допустимо? Читал, что для таких целей используют AlarmManager, но как его использовать для запуска вайфай так и не понял, во всех примерах обычные тоасты выводят с его помощью.
Как быть и что правильно для этого использовать? Голова уже кругом идёт от всех этих pendingIntent, alarmManager, BroadcastReceiver...
Сейчас код такой
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class MyService extends Service {
    final int DIALOG_EXIT = 1;
    final String LOG_TAG = "myLogs";    
 
    public void onCreate() {
        super.onCreate();
        Log.d(LOG_TAG, "onCreate");
    }
 
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG_TAG, "onStartCommand");
        someTask();
        //return super.onStartCommand(intent, flags, startId);
        return START_REDELIVER_INTENT;
    }
 
    public void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "onDestroy");
    }
 
    @Override
    public IBinder onBind(Intent arg0) {
        Log.d(LOG_TAG, "onBind");
        // TODO Auto-generated method stub
        return null;
    }
 
    private String getCurrentTime() {
        Calendar calendar = Calendar.getInstance();
        
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        // int second = calendar.get(Calendar.SECOND);
        int dof = calendar.get(Calendar.DAY_OF_WEEK);
        return String.format("%02d:%02d", hour, minute); // ЧЧ:ММ:СС
    }
 
    void someTask() {
        new Thread(new Runnable() {
            public void run() {
                String time = getCurrentTime(); // текущее время
                String alarmTime = "19:46";
 
                while (!alarmTime.equals(time)) {
                    try {
                        time = getCurrentTime();
                        Log.d(LOG_TAG, "Ещё не время " + time);
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                                
                // Включение Wi-fi
                WifiManager Wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                Wifi.setWifiEnabled(true);
                
                Log.d(LOG_TAG, "УРА = " + time);
                stopSelf();
            }
        }).start();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 20:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выполнение различных задач из Service (Программирование Android):

Выполнение задач в бэкграунде - Программирование Android
Доброго времени суток, нужна помощь с реализацией. Есть базе начальное время и конечное время, в этот промежуток на устройстве должен...

Как организовать выполнение двух различных задач параллельно - C#
Здравствуйте. Есть у меня такая проблема. Никак не могу понять как организовать выполнение 2х различных задач параллельно. Есть...

A Windows service with the name MySQL already exists. Please uninstall this service correctly or choose a different name for the new service. - MySQL
Не знаю что делать дальше

Решение различных задач - MathCAD
Учусь на индивидуальном, толком нам ничего не рассказали, а задания дали сделать до понедельника. Часть сделал, немного оставил, делаю, а...

Выполнение различных действий на ленточной форме - VBA
Как сделать, чтобы при выводе полей в ленточной форме (выводится несколько полей в виде таблицы размерности n X n) при наведении курсором...

Приоритетное выполнение задач - Delphi
Необходимо выполнить потоки в приоритетном порядке. Например, на форме есть 6 кнопок, каждая из который запускает поток, который не...

2
Netscape
374 / 361 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
15.05.2014, 21:38 #2
смысл такой:
регистрируем AlarmManager, который в заданное время запустит сервис, а уже в сервисе можно включить wi-fi.

пример:
http://khurramitdeveloper.blogspot.c...t-service.html
0
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
17.05.2014, 20:06  [ТС] #3
У меня сейчас и так сервис вызывается из активити, которое я потом закрываю, нужно чтобы сервис получив "задание" от активити начал выполнять задания.
А если я AlarmManager засуну в активити и закрою приложение, он будет запускать сервис?

Добавлено через 18 часов 22 минуты
Благодарю за пример, сделал вызов из активити, AlarmManager срабатывает нормально даже при закрытом приложении.
Появился другой вопрос: если мне нужно выполнять задачи в разное время, то мне нужно несколько AlarmManager, и если я не знаю заранее сколько в итоге мне понадобится AlarmManager'ов, как быть?

Добавлено через 4 часа 33 минуты
Сейчас у меня в главном активити так:
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
public void onToggleClicked(View view) {
        Intent intent1 = new Intent(this, MyService.class);
        pintent1 = PendingIntent.getService(this, 1, intent1, 0);
 
        Intent intent2 = new Intent(this, MyService.class);
        pintent2 = PendingIntent.getService(this, 2, intent2, 0);
        
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        
        boolean on = ((ToggleButton) view).isChecked();
        if (on) {
            status = "1";
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    System.currentTimeMillis() + 5000, 20000, pintent1);
            
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    System.currentTimeMillis() + 10000, 20000, pintent2);
 
            // startService(new Intent(this, MyService.class));
            Toast.makeText(getApplicationContext(), "вкл",
                    Toast.LENGTH_LONG).show();
        } else {
            status = "0";
            stopService(new Intent(this, MyService.class));
            alarmManager.cancel(pintent1);
            alarmManager.cancel(pintent2);
            Toast.makeText(getApplicationContext(), "выкл",
                    Toast.LENGTH_LONG).show();
        }
    }
В сервисе так:
Java
1
2
3
4
5
6
7
8
9
10
11
public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG_TAG, "onStartCommand");
        Toast.makeText(this, "wifi",
                Toast.LENGTH_LONG).show();
        WifiManager Wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        Wifi.setWifiEnabled(true);  
        stopSelf();
        //someTask();
        return super.onStartCommand(intent, flags, startId);
        //return START_REDELIVER_INTENT;
    }
Но если количество pintent задает сам пользователь в активити, а у меня объявлено только 2?

Добавлено через 23 часа 26 минут
Монолог вышел отличный, проблему решил.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 20:06
Привет! Вот еще темы с ответами:

Выполнение асинхронных задач - C++
Попытался составить вот такой нехитрый сумматор на основе асинхронного выполнения. В результате - ничего не работает и на выходе всегда...

Проверить выполнение задач - MathCAD
Здравствуйте, хочу попросить, чтобы Вы проверили задания в среде MathCad и помогли выполнить недостающие (график, решить уравнение с...

Параллельное выполнение задач - C++ Linux
Всех приветствую, только начал изучать C++ и вообще Linux (работаю под Ubuntu), хочу написать консольную программу, появилось несколько...

Выполнение различных функций в зависимости от нажатой клавиши - C++/CLI
Я делаю игру в которую играют 2 человека на одной клавиатуре. Проблема: при нажатии клавиш одновременно управление происходит только одним...


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

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

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