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

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

Восстановить пароль Регистрация
 
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
15.05.2014, 20:55     Выполнение различных задач из Service #1
Сделал по примеру сервис, который включает в заданное время 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();
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 20:55     Выполнение различных задач из Service
Посмотрите здесь:

Android Автозапуск приложений. Service
Android SQLite в Service
Android Выполнение задач в бэкграунде
Android Fragments и service
Service Android
Android App Service
Автозагрузка Service Android
SQLite из Service Android
Service fragment broadcast Android
Android Принцип работы Service
GetContentResolver() внутри service Android
Работа с Service Android

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

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

пример:
http://khurramitdeveloper.blogspot.c...t-service.html
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
17.05.2014, 20:06  [ТС]     Выполнение различных задач из Service #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 минут
Монолог вышел отличный, проблему решил.
Yandex
Объявления
17.05.2014, 20:06     Выполнение различных задач из Service
Ответ Создать тему
Опции темы

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