So spielen Sie programmgesteuert einen kurzen Piepton für den Lautsprecher des Android-Telefons ab

Lesezeit: 3 Minuten

Um den nur kurzen Piepton am Lautsprecher zu erhalten, möchte ich einzelne Bits direkt an den Lautsprecher senden. Ähnlich wie das LED-Blinken. Gibt es eine Möglichkeit, einen kurzen Piepton ohne jegliche Art von Mediaplayer zu machen?

  • mögliches Duplikat von How to play ringtone/alarm sound in Android

    – Agar

    8. April 2015 um 7:58 Uhr

  • Duplikat von stackoverflow.com/questions/12154940/…

    – Ferdau

    8. April 2015 um 8:04 Uhr

  • Ja, der beste Weg ist die Verwendung von NDK. Danke!

    – Andreikaschin

    26. Mai 2015 um 15:06 Uhr

Joshs Benutzeravatar
Josch

Ich empfehle Ihnen, die zu verwenden ToneGenerator Klasse. Es erfordert keine Audiodateien, keinen Mediaplayer, und Sie können die Lautstärke, die Dauer (in Millisekunden) und den Tontyp des Signaltons anpassen. Ich mag dieses:

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

Sie können in das ToneGenerator-Objekt sehen (CMD + Klick auf ToneGenerator. , in Mac) und daneben einen anderen Signaltontyp auswählen TONE_CDMA_PIP, 150 ist die Dauer in Millisekunden, und 100 die Lautstärke.

  • Wie erreichen wir damit einen doppelten Piepton?

    – Maurer

    3. November 2017 um 13:10 Uhr

  • @Mauker Sie können ‘ToneGenerator.TONE_PROP_BEEP2’ verwenden, um einen doppelten Piepton zu erzielen.

    – Manoj Pedvi

    17. Mai 2018 um 12:37 Uhr

  • Am Ende habe ich genau das versucht, und es funktioniert. Danke für den Kommentar Manoj!

    – Maurer

    17. Mai 2018 um 12:39 Uhr

  • @ManojPedvi WIE MAN LANGEN BEEP SPIELT?

    – Sagar

    6. August 2020 um 12:07 Uhr


  • Achtung – Sie müssen die anpassen duration Argument (etwas wie 300ms ist gut) zu spielen ToneGenerator.TONE_PROP_BEEP2 oder ein längerer Piepton

    – Sakiboy

    25. Februar 2021 um 2:05 Uhr

Ich füge nur Joshs Antwort hinzu. du musst loslassen ToneGenerator verwenden Handler. vor allem, wenn Sie einen Fehler haben java.lang.RuntimeException: Init failed at android.media.ToneGenerator.native_setup(Native Method) wie ich es getan habe.

der komplette Code:

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())
}
}

  • Gott sei Dank für die Einbeziehung der Import-Anweisungen! Wenn ich versuche, herauszufinden, wie etwas zu tun ist, weiß ich wahrscheinlich auch nicht, wo ich es finden kann. Danke schön! 🙂

    – Karen Kate

    24. Juli 2018 um 23:10 Uhr

Für Kotlin:

ToneGenerator(AudioManager.STREAM_MUSIC, 100).startTone(ToneGenerator.TONE_PROP_BEEP, 200)

In meinem Fall war der Tongenerator aus irgendeinem Grund nicht laut genug.

Am Ende habe ich den Media Player verwendet und eine Beeper-Klasse erstellt, die es ermöglicht, einen Piepton mit einer bestimmten Lautstärke abzuspielen.

import android.content.Context
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import com.nfci.mesea.time.R
import kotlin.math.ln

class Beeper(val context: Context) {

    private val maxVolume = 100f
    private val mediaPlayer = MediaPlayer()

    init {

        val beep = Uri.parse("android.resource://" + context.packageName + "/" + R.raw.beep)

        val audioAttributes = AudioAttributes.Builder()
            .setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
            .setLegacyStreamType(AudioManager.STREAM_ALARM)
            .setUsage(AudioAttributes.USAGE_ALARM)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build()

        mediaPlayer.setDataSource(context, beep)
        mediaPlayer.setAudioAttributes(audioAttributes)

        mediaPlayer.prepare()
    }

    fun play(volume: Int){
        if (!mediaPlayer.isPlaying) {
            val calculatedVolume = 1 - (ln(maxVolume - volume.toFloat()) / ln(maxVolume))
            mediaPlayer.setVolume(calculatedVolume, calculatedVolume)
            mediaPlayer.start()
        }
    }
}

1448620cookie-checkSo spielen Sie programmgesteuert einen kurzen Piepton für den Lautsprecher des Android-Telefons ab

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy