Scheduling alarm every 2 minutes android
Asked Answered
L

2

14

In my activity class

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis(),2000, pendingIntent);

    }

And My onrecieve function in alarmreciever class

     @Override
     public void onReceive(Context context, Intent intent)
      {   
        //get and send location information
         System.out.println("fired");
      }

I am using nexus 4, kitkat version. I don't see any onreceive function fired every 2 minutes.nthg is happening... any help? thank you

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.alarmexample"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="20" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <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="com.example.AlarmExample"
        android:exported="false" >
    </receiver>
</application>
 </manifest>

I just put my manifest as well. ................................................

Lympho answered 26/10, 2014 at 13:10 Comment(1)
have you put the alarm receiver class name in your manifest ?Leastways
E
17

In your setRepeating function, you should use SystemClock.elapsedRealTime() for ELAPSED_REALTIME_WAKEUP. Also, you need to change 2000 to 2*60*1000 to specify your interval time.

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(),
                          2*60*1000, 
                          pendingIntent);

Hope this helps.

Reference: ELAPSED_REALTIME_WAKEUP

EDIT: In your manifest file, there is a typo in your receiver name. Change ".AlarmReciever" to ".AlarmReceiver".

<receiver
    android:name=".AlarmReceiver"
    android:exported="true" >
</receiver>
Educatory answered 26/10, 2014 at 13:30 Comment(6)
its not working, my project is here wetransfer.com/downloads/… if u wanna check itLympho
@Lympho I checked out your project and found out a typo in your manifest file. I just updated my answer.Educatory
thank you lot, that solved the situation. now am working on another issue. in gingerbread the alarm manager is firing quickly, in kitkat its firing after 32 seconds.. when i do this 10*60*1000Lympho
@Lympho I think it's due to SystemClock.elapsedRealtime(). It returns milliseconds since boot. Thus, in your case, I guess gingerbread boot time is faster than kitkat's.Educatory
one more question, if i enter the app 200 times... the alarm manager gets overwritten with new one created right? i wouldn't have 100 alarm managers right?Lympho
Can u tell me how can I set it for 2 minutes only onceAttire
L
4

in your code you set the alarm this way

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            System.currentTimeMillis(),
            2000,
            pendingIntent);

the interval time is wrong to run every two minutes you should write:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            0,
            1000 * 60 * 2,
            pendingIntent);

EDIT

for your pending intent set flag PendingIntent.FLAG_UPDATE_CURRENT and see if it changes anything.

PendingIntent alarmIntent = PendingIntent.getBroadcast(context,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
Leastways answered 26/10, 2014 at 13:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.