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

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

Войти
Регистрация
Восстановить пароль
 
 
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
#1

Как запустить метод в заданное время - Программирование Android

19.11.2016, 19:15. Просмотров 597. Ответов 22
Метки нет (Все метки)

Доброго времени суток) Борюсь над задачей, в которой нужно, чтобы в указанное время запускался метод, даже если приложение было закрыто/свёрнуто. Гугл говорит, что нужно использовать AlarmManager. Окей, использую, но в качестве параметра нужно прописать pendingIntent. И вот тут начинаются проблемы. Чтобы создать PendingIntent, нужен Intent, где в одном из параметров нужен ещё и .class отдельный. Неужели нет других вариантов??? Вообщем, мне нужно, как-то реализовать метод volume_method() в указанное время. Помогите!!!
Java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void volume_method() {
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
        volumesetter.setStreamVolume(AudioManager.STREAM_NOTIFICATION, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        volumesetter.setStreamVolume(AudioManager.STREAM_SYSTEM, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_RING);
        volumesetter.setStreamVolume(AudioManager.STREAM_RING, volume_set, volume_set);
    }
 
public void AM() {
        am = (AlarmManager)getSystemService(ALARM_SERVICE);
        time = System.currentTimeMillis() - c_time.getTimeInMillis() + time_set_h*60*60*1000 + time_set_m*60*1000;
        am.setRepeating(AlarmManager.RTC, System.currentTimeMillis() - c_time.getTimeInMillis() + time, AlarmManager.INTERVAL_DAY, volume_method());
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2016, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как запустить метод в заданное время (Программирование Android):

Как запустить метод в сервисе, в определённое время? - Программирование Android
Как запускать метод в сервисе, с понедельника по пятницу в определённое время? Подскажите пожалуйста кто знает куда смотреть?

Переход между Activity через заданное время. Как лучше? - Программирование Android
Добрый день. Вопрос от новичка. Какую задачу хотел решить: появляется первое Activity. Через 5 секунд (например) - приложение...

Как запустить метод из Service? - Программирование Android
При запуске сервиса в onCreate запускается метод, когда он отрабатывает запускается PendingIntent.getBroadcast. Как сделать чтобы...

Как запустить метод из другого класса? - Программирование Android
есть класс: public class Class1 extends DialogFragment implements OnClickListener { TextView textViewMessage; String name;...

Как запустить метод Fragment из MainActivity? - Программирование Android
есть фрагмент с картой, в нем метод: public void Sputnik(GoogleMap map) { ...

Как запустить метод в Activity из BroadcastReceiver - Программирование Android
Здравствуйте!!! Все до банальности просто и повторяется, по кругу :) Новичок, увлекся Java & Android... Пытаюсь изобразить приложения...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
19.11.2016, 19:39 #2
То что ты написал должно быть внутри сервиса, который ты и прописываешь в Intent.
0
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
19.11.2016, 19:46  [ТС] #3
Цитата Сообщение от ExFau$t Посмотреть сообщение
То что ты написал должно быть внутри сервиса, который ты и прописываешь в Intent.
То есть, мне создать интент, где указать класс, в который я вставлю
Этот код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void volume_method() {
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
        volumesetter.setStreamVolume(AudioManager.STREAM_NOTIFICATION, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        volumesetter.setStreamVolume(AudioManager.STREAM_SYSTEM, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_RING);
        volumesetter.setStreamVolume(AudioManager.STREAM_RING, volume_set, volume_set);
    }
 
    public void AM() {
        am = (AlarmManager)getSystemService(ALARM_SERVICE);
        time = System.currentTimeMillis() - c_time.getTimeInMillis() + time_set_h*60*60*1000 + time_set_m*60*1000;
        //am.setRepeating(AlarmManager.RTC, System.currentTimeMillis() - c_time.getTimeInMillis() + time, AlarmManager.INTERVAL_DAY, volume_method());
    }
Правильно понял? А что делать с PendingIntent, который запрашивает AlarmManager?
0
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
19.11.2016, 22:07 #4
Делаешь аля такое что-нибудь:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MyBroadcast extends BroadcastReceiver {
 
    public void SetAlarm(Context context, PendingIntent pendingIntent) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY,15);
        calendar.set(Calendar.MINUTE,0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),60000*60*24,pendingIntent);
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("11111111111111111111111", "log receive");
    }
}
и инициализируешь, например, так:
Java
1
2
3
4
MyBroadcast al = new MyBroadcast();
            Intent intent = new Intent(this, MyBroadcast.class);
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
            al.SetAlarm(this, pi);
Писал по памяти...

Добавлено через 42 секунды
Само собой класс этот объявляешь в манифесте:
XML
1
2
3
<receiver android:name="com.blabla.app.MyBroadcast">
 
        </receiver>
1
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
19.11.2016, 23:18  [ТС] #5
Цитата Сообщение от ExFau$t Посмотреть сообщение
Делаешь аля такое что-нибудь:
Сделал! подскажите чайнику, как мне мои переменные time_set_h и time_set_m передать в MyBroadcast.class? И как всю эту тему вызвать сдесь
Java
1
2
3
4
5
6
7
button_alert.setPositiveButton(R.string.OkeyButton, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //Чо писать? :)
                            dialog.cancel();
                        }
                    });
0
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
19.11.2016, 23:45 #6
Цитата Сообщение от ExFau$t Посмотреть сообщение
и инициализируешь, например, так:
Java
1
2
3
4
MyBroadcast al = new MyBroadcast();
            Intent intent = new Intent(this, MyBroadcast.class);
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
            al.SetAlarm(this, pi);
это и пиши, только вместо this ставишь контекст. Если нужно переменные передать, то расширь метод SetAlarm в бродкасте, а потом допишешь сюда:
Java
1
al.SetAlarm(this, pi,time_set_h ,time_set_m);
1
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
20.11.2016, 12:02  [ТС] #7
Цитата Сообщение от ExFau$t Посмотреть сообщение
это и пиши
Java
1
2
3
4
5
button_alert.setPositiveButton(R.string.OkeyButton, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            AM();
                            dialog.cancel();
Java
1
2
3
4
5
6
public void AM() {
        MyBroadcast al = new MyBroadcast();
        Intent intent = new Intent(this, MyBroadcast.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
        al.SetAlarm(this, pi,time_set_h ,time_set_m);
    }
Java
1
2
3
4
5
public void SetAlarm(Context context, PendingIntent pendingIntent, int time_set_h, int time_set_m) {
        time = System.currentTimeMillis() - c_time.getTimeInMillis() + time_set_h*60*60*1000 + time_set_m*60*1000;
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC,System.currentTimeMillis() - c_time.getTimeInMillis() + time, AlarmManager.INTERVAL_DAY,pendingIntent);
    }
IDEA ошибок не видит. Только вот я так и не понял, куда мне сунуть этот метод, который должен выполняться в заданное время?
Java
1
2
3
4
5
6
7
8
public void volume_method() {
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
        volumesetter.setStreamVolume(AudioManager.STREAM_NOTIFICATION, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        volumesetter.setStreamVolume(AudioManager.STREAM_SYSTEM, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_RING);
        volumesetter.setStreamVolume(AudioManager.STREAM_RING, volume_set, volume_set);
    }
0
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
20.11.2016, 15:06 #8
сюда:
Java
1
2
3
public void onReceive(Context context, Intent intent) {
        Log.e("11111111111111111111111", "log receive");
    }
0
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
20.11.2016, 17:10  [ТС] #9
ExFau$t, Спасибо, передал, но почему-то по тому же принципу не получатся передать int volume_set, который также нужен. Ибо теперь context and intent are never used Что делать??
0
Миниатюры
Как запустить метод в заданное время   Как запустить метод в заданное время  
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
20.11.2016, 17:51 #10
Наверное потому, что они не используются, а то что у тебя красным бродкаст подчёркнут тебя не смущает?

Добавлено через 2 минуты
Убери volume_set из OnREcieve, переменную свою можно через конструктор передать.
0
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
20.11.2016, 17:54  [ТС] #11
Цитата Сообщение от ExFau$t Посмотреть сообщение
Наверное потому, что они не используются,
Они не используются после строчки al.onReceive(this, intent, volume_set);
Цитата Сообщение от ExFau$t Посмотреть сообщение
а то что у тебя красным бродкаст подчёркнут тебя не смущает?
Смущает, а чо делать??
0
Миниатюры
Как запустить метод в заданное время  
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
20.11.2016, 22:09 #12
Цитата Сообщение от ExFau$t Посмотреть сообщение
Убери volume_set из OnREcieve, переменную свою можно через конструктор передать.
Я уже написал
0
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
21.11.2016, 21:14  [ТС] #13
Цитата Сообщение от ExFau$t Посмотреть сообщение
Я уже написал
Ой, извини, не заметил

Добавлено через 22 часа 58 минут
Цитата Сообщение от ExFau$t Посмотреть сообщение
переменную свою можно через конструктор передать.
Уже смешно стало, я второй вечер над этим долблюсь и ничего не получается... Конструктор сделал, параметры вроде передал, а не работает! Или ошибка или ничего не происходит! Помоги правильно его сделать, кодом... Я - чайник, и уже кипю
0
ExFau$t
293 / 269 / 47
Регистрация: 08.05.2012
Сообщений: 1,454
21.11.2016, 22:45 #14
Показывай, что сделал и какая ошибка...
0
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 141
22.11.2016, 18:50  [ТС] #15
Цитата Сообщение от ExFau$t Посмотреть сообщение
Показывай, что сделал и какая ошибка...
попробовал два разных варианта: в первом - вроде всё ок, однако не работает. А во втором ошибка.
0
Миниатюры
Как запустить метод в заданное время   Как запустить метод в заданное время   Как запустить метод в заданное время  

Как запустить метод в заданное время  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2016, 18:50
Привет! Вот еще темы с ответами:

Ждать ответ заданное время - Программирование Android
Как реализовать такое: Я отправляю на сервер TCP данные и затем в течение определенного времени жду от сервера ответ?? Как сделать так...

Выводить оповещения в заданное время - Программирование Android
Здравствуйте. Нужно выводить оповещения в заданное время, создаю сервис через alarmManager, однако, если добавить несколько оповещений,...

Уведомления в заданное время без Alarm - Программирование Android
Пытаюсь вывести уведомление в заданное время не используя AlarmManager. Т.к. через AlarmManager, после перезагрузки, выводятся все...

Как определить заданное время - Visual Basic .NET
Не совсем проблема сколько совет. Допустим по достижению определенного времени нужно выполнить действие. Допустим если время 13:52 то...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.11.2016, 18:50
Ответ Создать тему
Опции темы

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