AlarmManager.RTC_WAKEUP没有唤醒设备?

时间:2013-11-22 04:25:58

标签: android service broadcastreceiver alarmmanager

我一直在尝试使用AlarmManager.RTC_WAKEUP来唤醒我的设备以播放一些声音。 这是警报安排:

Intent intent = new Intent(Main.this, OneShotAlarm.class); 
PendingIntent sender =  PendingIntent.getBroadcast(Main.this, 0, intent, 0); 

// I want the alarm to go off 60 seconds from now. 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.add(Calendar.SECOND, 60); 

// Schedule the alarm! 
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), sender); 

OneShotAlarm BroadCastReceiver:

public class OneShotAlarm extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
        Toast.makeText(context, "OneShotAlarm Broadcast invoked", 1000).show(); 

        intent = new Intent(context, ServiceClassToRun.class); 

        context.startService(intent); 
    } 
}

服务:

public class ServiceClassToRun extends Service { 
    protected static final int Rnd = 0; 

     public void onStart(Intent intent, int startId) { 
     //do some business here 
} 

最后,我的清单:

<receiver android:name=".OneShotAlarm" android:process=":remote" /> 
<service android:name=".ServiceClassToRun "/> 

当设备处于唤醒状态时,我的服务正常。 任何想法都非常感谢。有没有其他人经历过这一点 好?提前致谢。

3 个答案:

答案 0 :(得分:1)

PendingIntent sender =  PendingIntent.getBroadcast(Main.this, 0, intent, 0);

更改为

PendingIntent sender =  PendingIntent.getBroadcast(Main.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

或者,如果您错过了闹钟的许可,请添加这些权限

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

让我知道,如果它适合你

答案 1 :(得分:1)

我怀疑这仍然与作者有关​​,但也许对其他人有用。 可能问题的原因是你没有获得任何唤醒锁。在调用OneShotAlarm.onReceive时,系统会为您保留一个唤醒锁。您通过发送意图来启动服务。但是在OneShotAlarm.onReceive返回后,没有保留的唤醒锁,设备进入休眠状态。因此,只有在手动唤醒设备时才会发出您的意图。

您可以在https://github.com/yuriykulikov/AlarmClock/blob/develop/src/com/better/alarm/model/AlarmsService.java

看到一个带唤醒锁的示例

祝你好运, 尤里

答案 2 :(得分:0)

您的服务 - 在您设置闹钟后1分钟将调用ServiceClassToRun。但是您不会知道它,因为您在onStart()方法中没有做任何事情。还要覆盖onBind和onCreate方法。 / p>

当调用onStart服务方法时,您可以实现通知或播放声音

您可以询问是否有任何进一步的疑问。