2013-08-26 33 views
0

我尝试在我的应用程序中设置闹钟,但是当电话锁定时,活动不会像标准闹钟那样启动。我能做些什么来决定这个问题?当我的电话锁定时,我的闹钟不会启动活动

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

    Intent intent = new Intent(this, AlarmReceiverActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 
     12345, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager am = 
     (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
      pendingIntent); 
+0

1.登录你的代码。 2.检查此(活动)值。 – pvllnspk

+0

阅读下面的答案...实际发生的事情是,手机会短时间醒来处理闹钟管理器的onReceive方法,但随后会立即回到睡眠状态,因此您不会看到您的活动开始。 – JanBo

回答

2

在这种情况下,这是“正常”行为。

为了克服它,你需要获得一个wake_lock到CPU。

只要警报接收器的onReceive()方法正在执行,警报管理器就会保持CPU唤醒锁定。这可以保证手机在您完成广播处理之前不会睡眠。一旦onReceive()返回,警报管理器就释放这个唤醒锁。 这意味着只要您的onReceive()方法完成,手机会在某些情况下进入休眠状态。如果您的闹钟接收器名为Context.startService(),,则可能是在请求的服务启动之前手机会睡眠。为防止出现这种情况,您的BroadcastReceiver和Service 需要实施单独的唤醒锁定策略,以确保电话继续运行,直到服务可用。

这是来自:http://developer.android.com/reference/android/app/AlarmManager.html

类似的问题:https://groups.google.com/forum/#!topic/android-developers/RAg9LJmH1oo


这是你所需要的:http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

Problem acquiring wake lock from broadcast receiver

相关问题