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 (5 秒) を追加してみてください。

他のすべてのものは私には問題ないようです。

于 2012-12-06T19:50:40.083 に答える