Как программировать краткий звуковой сигнал для громкоговорителя Android Phone

Чтобы получить единственный короткий звуковой сигнал на громкоговорителе, я хочу напрямую отправить один бит в громкоговоритель. Аналогично светодиоду мигает. Есть ли возможность делать короткий звуковой сигнал без каких-либо медиаплеер?

Ответ 1

Я рекомендую вам использовать класс ToneGenerator. Он не требует аудиофайлов, нет медиаплеера, и вы можете настроить громкость звукового сигнала, продолжительность (в миллисекундах) и тип тона. Мне нравится этот:

ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);             
toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP,150);  

Вы можете увидеть объект ToneGenerator (CMD + щелчок по ToneGenerator., На Mac) и выбрать другой звуковой сигнал, кроме TONE_CDMA_PIP, 150 - это продолжительность в миллисекундах и 100 томов.

Ответ 2

просто добавив ответ josh. вам нужно освободить ToneGenerator с помощью Handler. особенно если у вас возникла ошибка java.lang.RuntimeException: Init failed at android.media.ToneGenerator.native_setup(Native Method) как я.

полный код:

import android.media.AudioManager
import android.media.ToneGenerator
import android.os.Handler
import android.os.Looper

class BeepHelper
{
val toneG = ToneGenerator(AudioManager.STREAM_ALARM, 100)

fun beep(duration: Int)
{
    toneG.startTone(ToneGenerator.TONE_DTMF_S, duration)
    val handler = Handler(Looper.getMainLooper())
    handler.postDelayed({
        toneG.release()
    }, (duration + 50).toLong())
}
}