56

我想让一个按钮播放哔声以表明它已被按下。我想知道如何使用默认的 android 哔声(例如在调整铃声音量时),而不是导入我自己的 mp3 音乐文件或使用 ToneGenerator?

4

4 回答 4

83

... 使用默认的 android 哔声(例如当您调整铃声音量时)...

在我的 Cyanogen 7 Nexus One 和我的旧库存 T-Mobile Pulse Mini(后者来自内存)上,据我所知,这正是音量变化时的默认哔声:

     final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
     tg.startTone(ToneGenerator.TONE_PROP_BEEP);

您似乎在要求替代ToneGenerator,但我认为它在两行中为您提供了您想要的东西。

以下是ToneGenerator我尝试的其他一些不匹配的可能声音(前两个可能有用作为音量哔声的替代):

     // Double beeps:     tg.startTone(ToneGenerator.TONE_PROP_ACK);
     // Double beeps:     tg.startTone(ToneGenerator.TONE_PROP_BEEP2);
     // Sounds all wrong: tg.startTone(ToneGenerator.TONE_CDMA_KEYPAD_VOLUME_KEY_LITE);
于 2012-05-02T14:42:27.177 回答
77
public void playSound(Context context) throws IllegalArgumentException, 
                                              SecurityException, 
                                              IllegalStateException,
                                              IOException {

    Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    MediaPlayer mMediaPlayer = new MediaPlayer();
    mMediaPlayer.setDataSource(context, soundUri);
    final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
        // Uncomment the following line if you aim to play it repeatedly
        // mMediaPlayer.setLooping(true);
        mMediaPlayer.prepare();
        mMediaPlayer.start();
    }
}

我找到了另一个答案:

try {
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
    r.play();
} catch (Exception e) {
    e.printStackTrace();
}

归功于https://stackoverflow.com/a/9622040/737925

于 2011-07-14T07:51:20.817 回答
3

您可以通过 ToneGenerator 类访问 Android 的默认蜂鸣声。

import android.media.AudioManager;
import android.media.ToneGenerator;
ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, 200);
toneGenerator.startTone(ToneGenerator.TONE_CDMA_EMERGENCY_RINGBACK);

有关它们听起来如何的更多信息:https ://developer.android.com/reference/android/media/ToneGenerator和 https://www.youtube.com/watch?v=HVu7K9W1_BM

于 2020-07-02T15:44:01.987 回答
1

简单的方法是使用 ToneGenerator 类的实例:

    //declaration
    ToneGenerator toneG;
    //using any where`
    if(val>=taux_max)
    {
        taux_text.setTextColor(warnning_col);
        toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); //200 is duration in ms
    }
于 2013-02-22T00:33:10.507 回答