我的应用程序应该是闹钟。如果我将警报时间设置为大约5分钟或30分钟,它会按照应有的方式响铃,但是如果我把它放在4个小时之外,它就不会响,如果我的设备从未接触过夜(过夜),也不会我经常使用它(白天)。
在主要方法中我得到了Wackelock
:
PowerManager powman = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powman.newWakeLock(PowerManager.FULL_WAKE_LOCK,"MyWakelockTag");
wakeLock.acquire();
然后我这样打电话给AlarmReceiver
:
Intent alarmIntent = new Intent(main.this, AlarmReceiver.class);
PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(main.this, 8932, alarmIntent, 0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC_WAKEUP, AlertDate.getTime(), alarmPendingIntent);
最后我的AlarmReceiver
看起来像这样:
public class AlarmReceiver extends WakefulBroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
main.Alert(context);
}
}
我的清单在这里:
<uses-permission android:name="android.permission.WAKE_LOCK" />
...
<application
...
<receiver
android:name=".AlarmReceiver"
android:permission="android.permission.WAKE_LOCK">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
所以非常简短的问题是:为什么main.Alert(context);
在较长时间后才被调用?该过程是否可能被Android OS
杀死?
答案 0 :(得分:0)
@ Pixel_95正在做什么main.Alert(context);
?
无论如何,PowerManager需要在构造函数(不是PARTIAL)中使用FULL_WAKE_LOCK,或类似的东西,但是当你使用WakefullBroadcastReceiver时,你需要调用completeWakefulIntent(intent);
才能唤醒设备,如果你这样做,你就需要不需要PowerManager代码行。