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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
#1

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

28.08.2014, 16:43. Просмотров 1333. Ответов 11
Метки нет (Все метки)

Всем привет. Взял код AlarmManager отсюда. В свой проект добавил AlarmManagerBroadcastReceiver.java и код AlarmManagerActivity.java в свое активити.
Вот код моего MainActivity:
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
66
67
68
69
package test.alarmmanager;
 
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
 
 
public class MainActivity extends Activity {
    
    private AlarmManagerBroadcastReceiver alarm;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        alarm = new AlarmManagerBroadcastReceiver();
    }
 
    @Override
    protected void onStart() {
        super.onStart();
    }
 
       public void startRepeatingTimer(View view) {
        Context context = this.getApplicationContext();
        if(alarm != null){
            alarm.SetAlarm(context);
        }else{
            Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
        }
       }
       
       public void cancelRepeatingTimer(View view){
        Context context = this.getApplicationContext();
        if(alarm != null){
            alarm.CancelAlarm(context);
        }else{
            Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
        }
       }
       
       public void onetimeTimer(View view){
        Context context = this.getApplicationContext();
        if(alarm != null){
            alarm.setOnetimeTimer(context);
        }else{
            Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
        }
       }
       
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
Но код напрочь отказывается работать, хотя скаченный отсюда APK работает. Что не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2014, 16:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос AlarmManager (Программирование Android):

AlarmManager - Программирование Android
Добрый вечер, как задать время вручную ? alarmManager.set(AlarmManager.RTC, System.currentTimeMillis(), pendingIntent);

AlarmManager описание - Программирование Android
Здравствуйте. Подскажите хороший гайд по работе AlarmManager. А то в основном примеры толком не работающие.

AlarmManager и TextView - Программирование Android
Здравствуйте. Задача такая: есть AlarmManager и TextView. Как заставить AlarmManager отсчитывать время, заданное пользователем, и...

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

AlarmManager.setWindow - Программирование Android
Здравствуйте. Сделал alarmManager.setWindow(AlarmManager.RTC, calendar2.getTimeInMillis(), calendar2.getTimeInMillis(), ...

AlarmManager + Notification - Программирование Android
Взялся за создания Нотификаций в определённое время. До этого такого ещё такого не делал, без помощи гугла не обошлось. В фрагменте...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sputttnik
3 / 3 / 3
Регистрация: 28.01.2014
Сообщений: 7
28.08.2014, 18:57 #2
Broadcast reciever зарегистрирован?
1
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
28.08.2014, 19:09  [ТС] #3
sputttnik, где его регистрировать?
0
sputttnik
3 / 3 / 3
Регистрация: 28.01.2014
Сообщений: 7
28.08.2014, 19:17 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
в манифесте, можно программно.
пример для манифеста.
<!-- Broadcast receiver -->
<receiver android:name=".AlarmManagerBroadcastReceiver"></receiver>
0
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
28.08.2014, 19:23  [ТС] #5
sputttnik, а куда конкретно писать в манифест?
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test.alarmmanager"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
0
sputttnik
3 / 3 / 3
Регистрация: 28.01.2014
Сообщений: 7
28.08.2014, 19:32 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test.alarmmanager"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
     <receiver android:name=".AlarmManagerBroadcastReceiver"></receiver>
    </application>
</manifest>
1
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
28.08.2014, 19:36  [ТС] #7
sputttnik, а так вылет.
0
sputttnik
3 / 3 / 3
Регистрация: 28.01.2014
Сообщений: 7
28.08.2014, 19:37 #8
что за ошибки выдает?
0
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
28.08.2014, 19:42  [ТС] #9
sputttnik,
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
08-28 19:39:44.112: D/AndroidRuntime(31207): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
08-28 19:39:44.112: D/AndroidRuntime(31207): CheckJNI is OFF
08-28 19:39:44.572: D/AndroidRuntime(31207): Calling main entry com.android.commands.pm.Pm
08-28 19:39:44.592: D/AndroidRuntime(31207): Shutting down VM
08-28 19:39:45.313: D/AndroidRuntime(31219): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
08-28 19:39:45.313: D/AndroidRuntime(31219): CheckJNI is OFF
08-28 19:39:45.713: D/AndroidRuntime(31219): Calling main entry com.android.commands.am.Am
08-28 19:39:45.743: D/AndroidRuntime(31219): Shutting down VM
08-28 19:39:49.527: D/AndroidRuntime(31230): Shutting down VM
08-28 19:39:49.537: E/AndroidRuntime(31230): FATAL EXCEPTION: main
08-28 19:39:49.537: E/AndroidRuntime(31230): Process: test.alarmmanager, PID: 31230
08-28 19:39:49.537: E/AndroidRuntime(31230): java.lang.RuntimeException: Unable to start receiver test.alarmmanager.AlarmManagerBroadcastReceiver: java.lang.SecurityException: Neither user 10397 nor current process has android.permission.WAKE_LOCK.
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2443)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.app.ActivityThread.access$1700(ActivityThread.java:145)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.Looper.loop(Looper.java:136)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.app.ActivityThread.main(ActivityThread.java:5137)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at java.lang.reflect.Method.invokeNative(Native Method)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at java.lang.reflect.Method.invoke(Method.java:515)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at dalvik.system.NativeStart.main(Native Method)
08-28 19:39:49.537: E/AndroidRuntime(31230): Caused by: java.lang.SecurityException: Neither user 10397 nor current process has android.permission.WAKE_LOCK.
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.Parcel.readException(Parcel.java:1465)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.Parcel.readException(Parcel.java:1419)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:348)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:839)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.os.PowerManager$WakeLock.acquire(PowerManager.java:808)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at test.alarmmanager.AlarmManagerBroadcastReceiver.onReceive(AlarmManagerBroadcastReceiver.java:24)
08-28 19:39:49.537: E/AndroidRuntime(31230):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2436)
08-28 19:39:49.537: E/AndroidRuntime(31230):    ... 10 more
0
sputttnik
3 / 3 / 3
Регистрация: 28.01.2014
Сообщений: 7
28.08.2014, 19:48 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
у тебя нет разрешений 08-28 19:39:49.537: E/AndroidRuntime(31230): Caused by: java.lang.SecurityException: Neither user 10397 nor current process has android.permission.WAKE_LOCK.
добавь в xml <uses-permission android:name="android.permission.WAKE_LOCK"/>
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test.alarmmanager"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
 
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
     <receiver android:name=".AlarmManagerBroadcastReceiver"></receiver>
    </application>
</manifest>
1
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
29.08.2014, 01:47  [ТС] #11
sputttnik, огромное спасибо за помощь, все работает, оказывается надо было еще мне скопировать манифест с github, кроме java файлов.

Добавлено через 5 часов 41 минуту
sputttnik, очень странно, отдельный проект, то есть чисто с AlarmManager работает отлично, я создал класс AlarmManagerBroadcastReceiver.java в своем основном проекте, где нужен AlarmManager, зарегистрировал Broadcast receiver в манифесте, перенес весь код с тестового проекта. В итоге получился полностью идентичный код, но в первом случае он работает, а во втором нет. В чем может быть проблема? Я даже удалил тестовый проект с телефона во избежание конфликтов и все равно не работает.
0
NOVICHOK2012
6 / 6 / 0
Регистрация: 13.04.2012
Сообщений: 99
30.08.2014, 02:39  [ТС] #12
Все разобрался, оказывается надо было добавить AlarmManagerBroadcastReceiver.java в папку gen и в MainActivity в import добавить строчку:
Java
1
import название приложения.AlarmManagerBroadcastReceiver;
В AlarmManagerBroadcastReceiver.java есть такой код, он отлично работает и каждую секунду срабатывает AlarmManager и записывает в Log "Будильник сработал!".
Java
1
2
3
4
5
6
7
public void onReceive(Context context, Intent intent) {
         PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
         wl.acquire();
         Log.d(TAG,"Будильник сработал!");
         wl.release();
    }
Но проблема в том, что мне надо из кода в AlarmManagerBroadcastReceiver.java сравнить значения в MainActivity двух текстовых полей - texttime и textalarm, как получить к ним доступ из AlarmManagerBroadcastReceiver.java?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2014, 02:39
Привет! Вот еще темы с ответами:

Обновление приложения и AlarmManager - Программирование Android
Доброе утро, уважаемые форумчане! Хочу сделать приложение – будильник. С помощью AlarmManager запускаю приложение в нужное время, все...

AlarmManager работает ли? Состояние - Программирование Android
Как узнать состояние работающего (запущенного ) AlarmManager ? Добавлено через 2 минуты то есть нужна логика if...

AlarmManager и Service or Receiver? - Программирование Android
Целый день искал, но нифига не нашел( то что нашел помогло тоолько частично). Суть вот в чем, у меня есть AlarmManeger как уже всем и так...

AlarmManager после перезагрузки - Программирование Android
По задумке AlarmManager должен отрабатывать раз в день. Включаю (сейчас 18-00): alarmManager.setRepeating( AlarmManager.RTC, ...


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

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

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