2013-11-22 94 views
1

我一直在尝试使用AlarmManager.RTC_WAKEUP来唤醒我的设备来播放一些声音。 这里的报警调度: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广播接收器:

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 "/> 

我的服务工作正常。 任何想法,不胜感激。有没有其他人经历过这样的 ?提前致谢。

+0

你有写的所有权限的例子吗? –

回答

0

您的服务 - ServiceClassToRun将在您设置警报1分钟后调用。但您不会在onStart()方法中做任何事情时知道它,也可以重写onBind和onCreate方法。

您可以实现通知或播放声音时服务的OnStart方法被称为

你可以问,如果您有任何疑问。

+0

感谢您的快速回答。事实上,我没有显示那部分代码,因为我的问题会变得冗长。当设备处于唤醒状态时,我的服务工作正常。 –

+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"/> 

让我知道,如果这对你

+0

Is帮助我在闹铃触发时间打开手机。 –

1

工作我怀疑这对作者是否仍然有用,但也许对其他人有用。 这个问题的原因可能是你没有获得任何唤醒锁。当OneShotAlarm.onReceive被调用时,系统为你保留一个唤醒锁。你通过发送一个意向来开始一项服务。但在OneShotAlarm.onReceive返回后,没有任何持续的唤醒锁,设备进入睡眠状态。因此,只有在您手动唤醒设备时才会提供您的意图。

你可以看到这里激活锁定https://github.com/yuriykulikov/AlarmClock/blob/develop/src/com/better/alarm/model/AlarmsService.java

最好的问候, 尤里