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

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

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

Не работает AlarmManger - Программирование Android

16.05.2016, 18:21. Просмотров 81. Ответов 11
Метки нет (Все метки)

Всем добрый день.

Пробую запустить AlarmManager, но видимо, где-то что-то упустил.

в MainActivity:
Java
1
2
3
4
5
    @Override
    protected void onResume() {
        super.onResume();
        AlarmManagerReceiver.SetAlarm(this);
}
в Бродкасте:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class AlarmManagerReceiver extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl= pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"TAG");
        
       Toast.makeText(context,"Alarm",Toast.LENGTH_SHORT).show();
 
    }
 
    public static void SetAlarm(Context context)
    {
        AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent=new Intent(context, AlarmManagerReceiver.class);
        PendingIntent pi= PendingIntent.getBroadcast(context,0, intent,0);
        am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10000,pi);
    }
}
в Манифесте:
XML
1
2
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<receiver android:name=".receivers.AlarmManagerReceiver"/>
Программу запускаю, но тоаст так и не показывается. Где я мог что-то упустить? Заранее, спасибо за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2016, 18:21     Не работает AlarmManger
Посмотрите здесь:

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает - Windows 7
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с недавних пор мышь стала работать через раз....

Через sublime text 3 и компилятор g++ работает, посоветовали скачать VS, не работает. Миниатюры - C++
через sublime text 3 и компилятор g++ работает, посоветовали скачать VS, не работает.

Windows 7, не работает часть служб, не работает сеть, восстановление системы не помогает - Windows 7
Приветствую коллеги! Сам админю уже лет 10, не случалось ситуации еще что гугл не помогал, но вот пришел в организацию, на пк банк клиент,...

Multimap STL - работает только запись в файл, поиск в файле не работает - C++
И снова здравствуйте. Снова я прошу вашей помощи. Переделал программу с мапом в мульти мап, но что то пошло не так и работает только запись...

Так работает или не работает второй слот для оперативной памяти - Оперативная память
Моему компьютеру уже больше 7-ми лет, купили мне его в сентября 2005 года. На то время очень даже неплохие характеристики: Процессор:...

Не работает скомпилированный EXE файл хотя в самой среде игра работает - Unity, Unity3D
Я почти закончил разработку своей игры на Unity2D но после запуска скомпилированного EXE файла половина текстур не отображается хотя в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
17.05.2016, 09:54     Не работает AlarmManger #2
а где?
Java
1
        registerReceiver(new AlarmManagerReceiver());
fraley
105 / 105 / 38
Регистрация: 24.05.2015
Сообщений: 316
17.05.2016, 10:43     Не работает AlarmManger #3
Цитата Сообщение от Паблито Посмотреть сообщение
а где?
Так в Манифесте же.
XML
1
<receiver android:name=".receivers.AlarmManagerReceiver"/>
Добавлено через 8 минут
И кстати в Манифесте к ресиверу надо добавить:
XML
1
2
android:enabled="true"
            android:exported="false"
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
17.05.2016, 10:54     Не работает AlarmManger #4
у меня наводящий вопрос - на какое событие сработает ресивер?
fraley
105 / 105 / 38
Регистрация: 24.05.2015
Сообщений: 316
17.05.2016, 11:32     Не работает AlarmManger #5
Паблито, хороший вопрос)))
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 117
17.05.2016, 17:31  [ТС]     Не работает AlarmManger #6
Паблито, насколько я понял, вот здесь устанавливаем срабатывание по времени am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10000,pi), то есть каждые 10 секунд аларм менеджер должен срабатывать?

Добавлено через 1 минуту
fraley, а для чего нужен enabled и exported?
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
17.05.2016, 17:32     Не работает AlarmManger #7
еще раз
Цитата Сообщение от Паблито Посмотреть сообщение
у меня наводящий вопрос - на какое событие сработает ресивер?
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 117
17.05.2016, 17:52  [ТС]     Не работает AlarmManger #8
Паблито, изначально мне необходимо сделать так, чтобы раз в день программа отправляла письмо на почту с вложенным файлом, поэтому событие это наступление определённого момента времени, например, 23.00 или 24.00, но в текущем коде я просто тестировал аларм менеджер и установил, чтобы аларм менеджер срабатывал каждые 10 секунд, после того как я его запустил в MainActivity. Таким образом, мне нужно просто сделать так, чтобы программа просыпалась в 23.00, отправляла письмо на почту и выключалась и это было каждый день! Может я неправильным путём иду?
fraley
105 / 105 / 38
Регистрация: 24.05.2015
Сообщений: 316
17.05.2016, 19:24     Не работает AlarmManger #9
Цитата Сообщение от Delphian Посмотреть сообщение
fraley, а для чего нужен enabled и exported?
• android:enabled: если имеет значение "true", то сервис может ли создаваться системой. Значение по умолчанию - "true".
• android:exported: указывает, могут ли другие компоненты приложения обращаться к сервису. Если имеет значение "true", то могут, если имеет значение "false", то нет.
Delphian, Паблито намекает вам, что необходим intent-filter на который будет срабатывать ресивер.
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 117
18.05.2016, 10:51  [ТС]     Не работает AlarmManger #10
fraley, да, точно, фильтра нет, но какой здесь можно поставить фильтр, если мне нужно чтобы было срабатывание в определённое время один раз в день?

Добавлено через 32 минуты
На текущий момент, сделал вот так в Манифесте
XML
1
2
3
4
5
6
        <receiver android:name=".receivers.AlarmManagerReceiver"
            android:enabled="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
и добавил в метод onReceive
Java
1
2
3
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            SetAlarm(context);
        }
Загрузил программу на телефон, потом сделал перезагрузку и всё равно никаких тостов не показывает
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
18.05.2016, 11:01     Не работает AlarmManger #11
по идее на это событие действительно не нужно ручками регистрировать ресивер
тогда надо проверить в манифесте разрешение
XML
1
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
и событие это может прилететь не сразу после перезагрузки, я когда-то игрался и мне бывало и через 1-3 минуты прилетало
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2016, 13:47     Не работает AlarmManger
Еще ссылки по теме:

не работает в ворде веб компонент,и скачав обновление ow 11 не работает все равно - MS Word
проблема с веб элементами и обновлениями на них))

Ноутбук работает только с Wi Fi роутера дома, в кафе не работает и везде. Почему? - Wi-Fi
Подскажите пожалуйста, почему у меня ноутбук с виндой 7, работает вай фай только дома с роутера. А когда я прихожу в кафе или в парк, у...

У клиента не работает роутер. У Меня дома работает. TRENDnet TEW-432BRP - Сетевое оборудование
Добрый день! У клиента установлен TRENDnet TEW-432BRP. Настроен для подключения к Beeline, но это не совсем важно. До определенного...

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


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

Или воспользуйтесь поиском по форуму:
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 117
18.05.2016, 13:47  [ТС]     Не работает AlarmManger #12
Паблито, спасибо за помощь, этот пермишен я добавил сразу когда добавлял интент, в конечном итоге я немного иначе разбил класcы сделал два бродкаста и заработало, не знаю, что именно помогло, но возможно кому-то понадобиться рабочий пример:
Manifest:
Java
1
2
3
4
5
6
7
8
9
10
11
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 
        <receiver android:name=".receivers.BootReceiver"
            android:enabled="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
 
        <receiver android:name=".receivers.AlarmManagerReceiver" android:enabled="true"/>
Настройка аларм менеджера
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class AlarmActivity {
 
    public static void SetAlarm(Context context)
    {
        // Set the alarm to start at approximately 23:00 p.m.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 23);
 
        AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent=new Intent(context, AlarmManagerReceiver.class);
        PendingIntent pi= PendingIntent.getBroadcast(context,0, intent,0);
        //Set the interval
        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.currentTimeMillis(),AlarmManager.INTERVAL_DAY,pi);
    }
}
BootReceiver:
Java
1
2
3
4
5
6
7
8
public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            AlarmActivity.SetAlarm(context);
        }
    }
}
AlarmManagerReceiver
Java
1
2
3
4
5
6
7
8
9
public class AlarmManagerReceiver extends BroadcastReceiver {
 
    public static final String EVERY_DAY="everyday";
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"Alarm",Toast.LENGTH_SHORT).show();
    }
}
Стоит сказать, что у меня изначально стояло повторение раз в 10 секунд, но почему то сообщение выводилось только раз в минуту, не знаю с чем это связано, но так как мне достаточно раз в день, то дальше не копался.
Yandex
Объявления
18.05.2016, 13:47     Не работает AlarmManger
Ответ Создать тему
Опции темы

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