2015-06-16 44 views
0

我有这种方法应该安排警报,但是当到达时间它不启动pendingintent?报警管理器不能正常工作

public void setAlarm(String name, long time) { 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent dialog = new Intent(this, SubActivity.class); 
    dialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent pi = PendingIntent.getActivity(this, 0, dialog, 0); 

    if (Build.VERSION.SDK_INT >= 19) { 
     if (System.currentTimeMillis() < time) { 
      am.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, pi); 
     }else{ 
      time+=(AlarmManager.INTERVAL_DAY*7); 
      am.setExact(AlarmManager.RTC_WAKEUP, time, pi); 
     } 
    } else { 
     am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, AlarmManager.INTERVAL_DAY * 7, pi); 
    } 
} 
+0

** 1 ** - setExact()在API级别19之前不起作用。** 2 ** - 从API级别19开始,setRepeating()'是**不精确的。** 3 ** - 您的代码应该粘贴在**这里**,而不是'pastebin'。 –

+0

好吧.. 我检查了我之前检查过SDK版本的代码,如果它是> = 19我使用setExact和setRepeating为低于19的版本我测试它在loli pop设备和设备API 16上但它不同时工作:/ –

+0

'setExact()'只适用于API 19+。对于较低版本使用'set()'。 –

回答

2

问题是你使用的是PendingIntentActivity,这并不一定会保持清醒设备足够长的Activity上手。对于BroadcastReceiver,您必须使用PendingIntent,它利用唤醒锁来保持设备的唤醒状态,直到您的应用代码可以运行。 WakefulBrodcastReceiver是一个不错的选择,或者你可以根据需要推出自己的产品。请参阅本文以获取有关如何使用警报唤醒设备的解释和示例:http://po.st/7UpipA

+0

谢谢你bro的解决方案帮助我,现在它的工作:D –

+0

没问题!我很高兴你能够通过它! –