当设备处于睡眠模式时,Android Alarm Manager不会触发

时间:2015-11-25 21:00:46

标签: android

我正在尝试为平板电脑创建一个提醒应用。 我的问题是,如果平板电脑处于睡眠模式,则不会调用警报。 我在github上尝试了很多项目,当我的平板电脑处于睡眠模式时,没有一个能够工作。

我的代码如下:

设置闹钟的代码:

    Intent intent = new Intent(getApplicationContext(),RingAlarmReceiver.class);
    Intent intent = new Intent("kidsplaylist.info.waketest.MyWakefulReceiver");

    PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 30);


        alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent);

接收者的代码:

public class MyWakefulReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    WakeLocker.acquire(context);
    // Start the service, keeping the device awake while the service is
    // launching. This is the Intent to deliver to the service.
    Intent service = new Intent(context, MyIntentService.class);
    startWakefulService(context, service);
    }
}

应该响铃的服务代码:

public class MyIntentService extends IntentService {
public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
public MyIntentService() {
    super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    // Do the work that requires your app to keep the CPU running.
    String song = Settings.System.DEFAULT_RINGTONE_URI.toString();

    MediaPlayer mediaPlayer = new MediaPlayer();
    try {
        mediaPlayer.setDataSource(getApplicationContext(), Uri.parse(song));
        mediaPlayer.prepare();
        mediaPlayer.setLooping(false);
        mediaPlayer.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // Release the wake lock provided by the WakefulBroadcastReceiver.
    MyWakefulReceiver.completeWakefulIntent(intent);
    }
}

任何有这么厚的经验的人都可以告诉我如何解决它

非常感谢

阿维

P.B:当设备连接到充电器或屏幕打开时,它可以正常工作 问题是设备屏幕关闭时。

1 个答案:

答案 0 :(得分:1)

请注意,在Android 6.0及更高版本中,Doze模式和应用待机状态会影响AlarmManager个事件。

除此之外,使用IntentService直接播放媒体也不会有效。一旦onHandleIntent()返回,IntentService将被销毁,您的流程通常会在此后不久终止。

我强烈建议你提出使用此媒体作为铃声的Notification。这将完全消除对服务的需求(您可以在Notification中提升onReceive(),因为这应该相当快地执行)。它使用户可以更好地控制音乐是否播放(通过Android 5.0+上的Notification控件),并为用户提供了一种直接关闭它的方式(轻扫Notification)。

如果您坚持自己播放媒体,则需要使用常规Service并管理自己的WakeLock,这样您就可以在播放媒体时保留所有优秀内容。媒体完成后,使用OnCompletionListenerstopSelf()服务和release() WakeLock