当手机未处于睡眠模式时,我的代码运行正常
我使用广播接收器在要更改日期时调用应用程序 代码如下
public class DateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("facebook_message", "Date Changed 1");
intent=new Intent(context, project.runningservice.SendPost.class);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.HOUR_OF_DAY, 13);
calendar.add(Calendar.MINUTE, 0);
calendar.add(Calendar.SECOND, 0);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getService(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
try {
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pi);
Log.d("message", "Wait");
} catch (Exception e) {
// TODO: handle exception
}
}
}
清单文件中的代码如下
.
.
<receiver android:name="project.datereceiver.DateReceiver"
android:process=":remote">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED"/>
</intent-filter>
</receiver>
.
.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
.
.
我希望我的服务课每天早上8点运行,日期改变了 手机处于睡眠模式时无法正常工作。 请告诉我哪里出错了?
答案 0 :(得分:1)
步骤1:完全摆脱DateReceiver
(类和清单条目)。
第2步:修改与AlarmManager
相关的代码,使用setRepeating()
代替set()
(以及使用未来的Calendar
代码,就像您的代码一样~45%可能会在过去创建日期),并在您的应用首次运行和重新启动时调用该代码。
答案 1 :(得分:0)
试试这个:
System.currentTimeMillis().set(AlarmManager.RTC_WAKEUP, System.getTimeInMillis() + AlarmManager.INTERVAL_HOUR*13,pi);