is it right way to set alarm at every 30 seconds ???

主宰稳场 提交于 2019-12-12 23:19:09

问题


I need to start alarm at every 30 seconds, I need it to be activated without running the app. But whether the app runs or not the AlarmReceiver do not get called. Any suggestions? start method is in MainActivity.java class

 public void start() {
    Calendar calendar=Calendar.getInstance();
    calendar.add(Calendar.SECOND, 30);
    Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
    PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pintent);
    Log.d("alarm","alarm set for alarm receiver");
}

My Receiver file

public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
   // Toast.makeText(context,"Alarm Receiver ",Toast.LENGTH_SHORT).show();
    Log.d("Alarm","Alarm receive");

}

}

Manifest File:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"

    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity" android:configChanges="keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name=".GetLocationService"/>
    <receiver android:name=".AlarmReceiver" android:enabled="true"/>
</application>

here i am able to set alarm, but i didn't receive alarm


回答1:


In this page there is a finished example of what you need:

https://www.thepolyglotdeveloper.com/2014/10/use-broadcast-receiver-background-services-android/

Apparently you have to change the line:

PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

To

PendingIntent pintent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

Change your start method to this:

public void start() {
    Intent alarmIntent = new Intent(this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    int interval = 30 * 1000; // 30 seconds of interval.
    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
    Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
}

Let me know if works.



来源:https://stackoverflow.com/questions/42180984/is-it-right-way-to-set-alarm-at-every-30-seconds

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!