我一直在试图解决这个问题数周。基本问题是,长时间放置设备(8小时)后,预定的通知将无法激活。在测试中,我一直在使用两个设备,LG Optimus Elite和三星Galaxy Note S4。在Optimus Elite上,通知会在设备被唤醒时发生,但在注意时,通知会完全消失并且不会显示。整个系统在设备醒着或短时间不活动后运行。Android Alarmmanager通知在长时间闲置期间未出现
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
WakeLocker.acquire(context);
Bundle bundle = intent.getExtras();
Intent i = new Intent(context, AlarmService.class);
i.putExtra("name", bundle.getString("name"));
i.putExtra("alarm", bundle.getString("alarm"));
context.startService(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
**public class AlarmService extends Service {
LocalBroadcastManager broadcaster;
static final public String REFRESH_INTENT = "rf";
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
public void handleIntent(Intent intent){
broadcaster = LocalBroadcastManager.getInstance(this);
Bundle bundle = intent.getExtras();
String message = bundle.getString("alarm");
if(message.equals("dosesTakenResetAlarm")){
dailyReset(getApplicationContext());
}
else if(message.equals("scheduledReminder")){
scheduledReminder(bundle.getInt("code", 0), bundle.getString("name"), getApplicationContext());
}
WakeLocker.release();
}
public void onStart(Intent intent, int startId){
handleIntent(intent);
}
public int onStartCommand(Intent intent, int flags, int startId){
handleIntent(intent);
return START_NOT_STICKY;
}
@Override
public void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
WakeLocker.release();
}
private void dailyReset(Context context){
FileWriter fw = new FileWriter(context);
AlarmCreator ac = new AlarmCreator();
fw.fp.onloadString(fw.readFromFile());
int medNum = 0;
while(fw.fp.hasNext()){
SaveData mv = fw.readEntry(medNum);
fw.fp.onloadMedString(mv.data);
String name = fw.fp.nextMedVariable();
String doses = fw.fp.nextMedVariable();
String frequency = fw.fp.nextMedVariable();
String frequencyS = fw.fp.nextMedVariable();
String reminders = fw.fp.nextMedVariable();
String dosesT = fw.fp.nextMedVariable();
frequencyS = ""+(Integer.parseInt(frequencyS)-1);
if(Integer.parseInt(frequencyS) < 0){
frequencyS = ""+(Integer.parseInt(frequency)-1);
}
fw.replaceEntry(fw.fp.buildMedSaveString(name, doses, frequency, frequencyS, reminders, "0"), mv.position1, mv.position2);
if(frequencyS.equals("0")){
fw.fp.onloadReminderString(reminders);
int reminderNum = 0;
while(fw.fp.hasNextReminder()){
ReminderData temp = fw.fp.nextReminder();
if(temp.half.equals("1")){
temp.hour = ""+(Integer.parseInt(temp.hour)+12);
}
ac.setAlarm(Integer.parseInt(temp.hour), Integer.parseInt(temp.minute), 0, ac.buildAlarmCode(medNum, reminderNum), name);
reminderNum++;
}
}
medNum++;
fw.fp.nextMedication();
}
Intent intent = new Intent(REFRESH_INTENT);
broadcaster.sendBroadcast(intent);
}
private void scheduledReminder(int code, String n, Context context){
Intent intent = new Intent(context, Main.class);
PendingIntent pIntent = PendingIntent.getActivity(context, 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.deleted)
.setContentTitle("Pillbud Reminder")
.setContentText("Take a dosage of "+n+".");
mBuilder.setDefaults(Notification.DEFAULT_ALL);
mBuilder.setContentIntent(pIntent);
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(code, mBuilder.build());
}
} **
此外,如果任何人有关于如何诱导此睡眠状态下这将是测试非常有帮助的任何建议。
为什么要以'droids全称的名义,是否有人投下此问题? WTF? –