您好我正在使用演示应用,我使用AlarmManager
每天8:00安排服务。我正在使用Calendar
在8:00时间安排服务,但此AlarmManager
未在预定时间甚至30分钟后运行服务。
以下是我的代码: -
public static void scheduleVerseNotificationService(Context mContext) {
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(mContext, DailyVerseNotificationService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
// Set the alarm to start at approximately 08:00 morning.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
TestService.java
public class TestService extends Service {
public TestService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
try {
// Code
} catch (Exception e) {
Logger.e(Constants.TAG, e.getMessage());
}
stopSelf();
}
}
的AndroidManifest.xml
<service
android:name="com.service.TestService"
android:enabled="true"
android:exported="true" />
提前致谢。
答案 0 :(得分:1)
两种解决方案: 1)而不是
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
使用
PendingIntent pendingIntent = PendingIntent.getService(mContext, 0, intent, 0);
2)如果这不起作用,那么你需要创建一个警报接收器
public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("AlarmReceiver", "onReceive");
ComponentName comp = new ComponentName(context.getPackageName(),
DailyVerseNotificationService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
将您的未决意图更改为
Intent intent = new Intent(mContext, AlarmReciever.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
在清单
中注册接收器 <receiver android:name="com.example.myApp.AlarmReceiver" />
最后将权限放在清单
中 <uses-permission android:name="android.permission.WAKE_LOCK" />
请参考以下内容: https://developer.android.com/training/scheduling/alarms.html
以上链接将指导您在“设备启动时启动警报”部分中创建启动接收器。
还要确保设置:
calendar.set(Calendar.MINUTE, 0); // for 0 minutes
calendar.set(Calendar.SECOND, 0); // for 0 seconds
答案 1 :(得分:0)
只是添加到Bhushan回答。
确保在启动时设置警报,因为如果关闭并重新启动设备,则会清除所有已注册的警报。