1
public void runSound(){

    Intent it = new Intent(Values.TAG_EXECUTE_ALARM);
    PendingIntent pendIntent = PendingIntent.getBroadcast(this, 0, it, 0);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND,0);

    AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
    long time = calendar.getTimeInMillis();
    alarm.set(AlarmManager.RTC_WAKEUP,time,pendIntent);
}

此方法是从服务调用的。即使设备处于睡眠模式,我的服务也应该播放声音以通知用户。

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context arg0, Intent arg1) {
    MediaPlayer player = MediaPlayer.create(arg0, R.raw.order_alarm);
    player.setAudioStreamType(AudioManager.STREAM_ALARM);

    player.start();

}

这是实际播放声音的类。不幸的是,设备没有唤醒,也没有播放声音。在设备进入睡眠模式之前调用 runSound 时,声音会完美运行......有什么想法吗?

编辑:

-> 删除了静态引用(是的,它们很愚蠢,因为 runSound 在服务中)。

-> 是的,标签值在接收者意图过滤器中定义

-> 改进了问题。

4

1 回答 1

0

好吧,我现在无法测试,但是查看您的代码我可以看到一些问题。

在 getBroadcast() 中,最后一个参数必须是一个标志,例如“FLAG_CANCEL_CURRENT”,我不确定 0 是否是一个有效标志。

在“长时间 = calendar.getTimeInMillis();” 看起来你正在过去一段时间,如果它在过去,它不会运行,尝试添加 5000(5s)。

所有其他的事情对我来说都很好。

于 2012-12-06T19:50:40.083 回答