繁体   English   中英

WakefulBrodcastReceiver /警报不响(Wakelock?进程被杀死?)

[英]WakefulBrodcastReceiver / Alert does not ring (Wakelock? Process killed?)

我有一个应为闹钟的应用程序。 如果我将警报时间设置为大约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);问题是:为什么是main.Alert(context); 长时间不打来? 这个过程可能被Android OS杀死了吗?

@ Pixel_95在做什么main.Alert(context); 无论如何,PowerManager在构造函数中需要为FULL_WAKE_LOCK(不是PARTIAL),或类似的东西,但是当您使用WakefullBroadcastReceiver时,您将需要调用completeWakefulIntent(intent); ;。 能够唤醒设备,如果您这样做,则不需要PowerManager代码行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM