2014-12-02 44 views
2

我想在Android的Kivy中創建一個簡單的鬧鐘。Android:播放來自Kivy後臺服務的聲音

我已經在後臺應用程序和用戶界面(UI)之間進行了通信:後臺應用程序正在向指定時間的用戶界面發送數據。

但我無法從服務中產生聲音或振動。它都可以在用戶界面中使用,但不能從服務中使用。我試過sound.play()kivy.core.audio。我得到這個從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() 

UPDATE:

後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 
+0

請你提供的代碼是'sound'變量是申報的嗎? – Nilesh 2014-12-02 06:14:17

+0

肯定: 從kivy.core.audio進口的SoundLoader 聲音= SoundLoader.load( 'sound.wav') 十隻: sound.play() – 2014-12-02 06:22:41

+0

哪個版本'kivy' u的使用? – Nilesh 2014-12-02 06:26:50

回答

1

你必須檢查是否soundNone。如果是,則該文件未加載。

從文檔load()

設置爲True如果聲音應該自動循環當它完成。

loop是BooleanProperty,默認爲False

所以,請檢查其值:

from kivy.core.audio import SoundLoader 

sound = SoundLoader.load('sound.wav') 
if sound: 
    print("Sound found at %s" % sound.source) 
    print("Sound is %.3f seconds" % sound.length) 
    sound.play() 
+0

現在,該功能在聲音上不會中斷,但它仍然不會播放它。在logcat中,我在答案更新中看到類似 – 2014-12-02 06:47:11

+0

所以我想它沒有加載。我仍然不知道如何加載並播放它 – 2014-12-02 07:05:51

0

一個解決方案是使用這種方法:

但它不工作「出箱」。問題描述如下: http://www.reddit.com/r/kivy/comments/2o2ws4/problem_with_running_a_service_on_android/ 解決方案由用戶在irc上創建並創建。

問題出在_android.pyx的178行上。的代碼片段必須被替換到這一個:

https://gist.github.com/kived/c833c97bbd044e68515e

另外我不得不dissable行:#br.context =服務在/services/main.py並添加:

RingtoneManager = autoclass('android.media。RingtoneManager')
[...] notification_builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM))

爲了使聲音

0

只是想出瞭如何使用的通知音量,而不是正常的媒體,幾乎總是是安靜的。 這裏就是我得到了很好的,響亮的通知聲音了Android上的巨蟒:

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