我一直在尝试使用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 "/>
当设备处于唤醒状态时,我的服务正常。 任何想法都非常感谢。有没有其他人经历过这一点 好?提前致谢。
答案 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返回后,没有保留的唤醒锁,设备进入休眠状态。因此,只有在手动唤醒设备时才会发出您的意图。
看到一个带唤醒锁的示例祝你好运, 尤里
答案 2 :(得分:0)
您的服务 - 在您设置闹钟后1分钟将调用ServiceClassToRun。但是您不会知道它,因为您在onStart()方法中没有做任何事情。还要覆盖onBind和onCreate方法。 / p>
当调用onStart服务方法时,您可以实现通知或播放声音
您可以询问是否有任何进一步的疑问。