我有一个应用程序应该是闹钟。如果我将警报时间设置为大约 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);
}
}
我的 list 在这里:
<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 操作系统
杀死?
@Pixel_95 main.Alert(context); 正在做什么?无论如何,PowerManager 需要在构造函数中设置为 FULL_WAKE_LOCK(而不是 PARTIAL),或者类似的东西,但是当您使用 WakefullBroadcastReceiver 时,您将需要调用 completeWakefulIntent(intent);
才能唤醒设备,如果您这样做,您将不需要 PowerManager 代码行。
我是一名优秀的程序员,十分优秀!