Skip to main content
 首页 » 编程设计

Android:从 Kivy 后台服务播放声音

2024年10月25日45sharpest

我正在尝试在 Kivy for Android 中创建一个简单的闹钟。

我已经在后台应用程序和用户界面 (UI) 之间建立了通信:后台应用程序在指定的时间向 UI 发送数据。

但我无法从服务中生成声音或振动。这一切都在 UI 上运行,而不是在服务上运行。

我确实尝试了 kivy.core.audio 中的 sound.play()。我从 logcat 得到这个:

AttributeError: 'NoneType' object has no attribute 'Play' 

如果我用jnius震动也一样:

AttributeError: 'NoneType' object has no attribute 'getSystemService' 

我确实尝试过使用 pyjnius 进行振动 this way和我的声音,就像我说的那样在 UI 上工作,就像这样:

from kivy.core.audio import SoundLoader 
sound = SoundLoader.load('sound.wav') 

然后:

sound.play() 

更新:

Lafadas 的更新后声音仍然没有播放,但错误后功能继续并且不会立即中断。

在 logcat 中,如果相关的话,我会看到类似这样的内容:

Kivy service log: 
    [INFO              ] Logger: Record log in /storage/emulated/0/org.alkoWatch/service/.kivy/logs/kivy_14-12-02_3.txt 
[    INFO              ] Kivy v1.8.0 
    [INFO              ] OSC: using <thread> for socket 
    [INFO              ] Audio: Providers:  (audio_pygst, audio_sdl, audio_pygame ignored) 
    [WARNING           ] Audio: Unable to find a loader for <sound.wav> 
    [DEBUG             ] OSC: Start thread <0.0.0.0:3000> 
    [INFO              ] OSC: listening for Tuio on 0.0.0.0:3000 

请您参考如下方法:

刚刚弄清楚如何使用通知音量而不是几乎总是安静的普通媒体。 以下是我如何在 android 上使用 python 获得良好、响亮的通知声音:

from jnius import autoclass 
MediaPlayer = autoclass('android.media.MediaPlayer') 
AudioManager = autoclass('android.media.AudioManager') 
mPlayer = MediaPlayer() 
mPlayer.setDataSource('/storage/sdcard0/Download/beep1.wav') 
mPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION) 
mPlayer.prepare() 
mPlayer.start() 
mPlayer.release()