闹钟声 - 并不总是播放

时间:2012-07-12 12:12:09

标签: java android

我正在编写警报程序。大多数似乎工作正常。我可以设置闹钟响起的时间。当这个时间到来时,我的广播接收器启动一个振动,发出声音并显示一个按钮的活动,以允许用户停止声音。当我运行程序时,我可以将警报设置为在一两分钟内响铃。然后我可以退出警报程序并继续运行其他程序。当警报时间到来时,我被闹钟活动打断,电话振动,闹钟响起,我看到了按钮。即使媒体音量调低,我也会听到声音。

问题是,如果手机正在睡觉,那么在闹钟时手机会振动,但我听不到声音。当我唤醒手机时,我正确地看到屏幕上的按钮。

我已经查看了大量不同的代码片段,了解如何发出警报声。它们看起来都非常复杂,彼此之间有着惊人的不同。我不完全理解他们中的任何一个。我使用的是如下所示的几个片段的集合:

alarm_sound = new MediaPlayer();

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alert == null){
    // alert is null, using backup
    alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    if(alert == null){  // I can't see this ever being null (as always have a default notification) but just incase
        // alert backup is null, using 2nd backup
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);               
    }
}

 try {
        alarm_sound.setDataSource(this, alert);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
 if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) 
 {

                alarm_sound.setAudioStreamType(AudioManager.STREAM_ALARM);
                alarm_sound.setLooping(true);
                try {
                    alarm_sound.prepare();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                alarm_sound.start();
  }

任何人都可以告诉我如何纠正我的代码以使其正常响起......或者可能会给我一个网站链接到一个解释它的网站简单地

编辑:我认为也许可以通过先唤醒手机解决问题。为此,我在振动之前发出了以下代码:

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();

PowerManager pm2 = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock2 = pm2.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock2.acquire();

我还在清单中添加了以下内容:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

这段代码看起来只有一半工作 - 电话确实在屏幕亮起时醒来,但锁定仍在开启,即我必须自己执行滑动解锁操作。只是为了增加对伤害的侮辱,警报仍然没有发出声音: - (

编辑::我刚刚添加了getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 对于我的主窗口。这绕过了锁定问题 - 但仍然没有声音。

0 个答案:

没有答案