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

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

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

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

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

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

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

Fragments и service - Программирование Android
такой вопрос как реализовать запуск сервиса и обработку результатов приложении где есть fragments.? хотелось бы запускать сервис в...

Работа с Service - Программирование Android
Всем добрый вечер! Есть приложение под андроид. С активити, с интерфейсом, всё как нужно. Теперь потребовалось сделать из него фоновое...

SQLite в Service - Программирование Android
Всем привет! Коллеги, возможно ли подключаться к базе и выполнять с ней все действия из Сервиса. Активити у меня нет, в программе 3...

Автозагрузка Service - Программирование Android
Привет, люди! Давно бьюсь с автозапуском сервисов. Скиньте, пожалуйста РАБОЧИЙ пример сего действа, иначе я вообще никогда так и не...

SQLite из Service - Программирование Android
Здравствуйте, у меня такой вопрос. Уже бьюсь 2 дня, ни как не могу сделать. Может вы мне поможете советом, а лучше примером. Как...

App Service - Программирование Android
Возможно ли как-то создать приложение, которое запускает сервис и при этом, если в дальнейшем удалить само приложение, то сервис останется...

Ошибка OutOfMemory в Service - Программирование Android
Используется Retrofit и GsonConverterFactory Есть фрагнмент поиска, при открытии запускается сервис и периодически(8 секунд)...

GPSTracker как Service - Программирование Android
Написал приложение, которое определяет местоположение по GPS/WiFi(мобильным сетям), показывает на карте в виде метки, записывает координаты...

Запуск activity из service - Программирование Android
Добрый вечер! Как правильно запускать активность из сервиса? Метод startActivity(new Intent(this,MyActivity.class)); не работает,...

Запуск Activiry из Service - Программирование Android
Как запустить activity из сервиса так, чтобы при этом на фоне не показывалось основное приложение (которое рождает сервис) Наверное...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ответ Создать тему
Опции темы

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