2011-08-22 93 views
6

我想知道的答案,一個簡單的問題,但我發現have'nt一個好 (我谷歌好幾個小時了:))使用SL4A

我打發送事件從蟒蛇的javascript與python sl4a和我可以發送事件從js到python腳本,但js沒有捕捉eventPost我把下面的代碼從python到js。

任何人都知道如何做到這一點,或者如果沒有registerCallback有另一種方式?

HTML代碼:

<html> 
<head> 
<script> 
var droid = new Android(); 
function doit(){ 
    droid.makeToast("Text send :=>"+document.getElementById("msg").value); 
    droid.eventPost("doit",document.getElementById("msg").value); 
} 

function alert_me(data){ 
    droid.makeToast("All done!"); 
    document.getElementById("msg").value = ''; 
} 

droid.registerCallback("done",alert_me); 
</script> 
</head> 
<body> 
<input type="text" name="boton" id="msg" value="" /> 
<input type="button" name="boton" value="Go!" onclick="javascript:doit()" /> 
</body> 
</html> 

Python代碼:

import android,time 

if __name__ == '__main__' : 

    droid = android.Android() 
    droid.webViewShow("file:///sdcard/sl4a/scripts/sample.html") 

    while True:   
     event = droid.eventWait().result 
     if event["name"] == 'doit': 
      droid.makeToast("Event catched! %s" % event['data']) 

      droid.eventPost("done","Done message") 
      time.sleep(2) 


    droid.exit() 
+0

您的JS'alert_me'函數不使用它接收到的參數。如果是這樣,arg將會有一個名爲'data'的成員,所以在你的函數中有'data.data',它將評估爲''Done Message''。 –

回答

1

這很容易工作,但並不明顯或有據可查。

首先,您想獲得webview中Android對象的鉤子。然後你可以使用它來註冊一個或多個回調。舉一個簡單的例子,我們將做一個彈出警告,並附帶Python的消息。

var droid = new Android(); 

    droid.registerCallback("echo", function(msg) { 
     alert(msg.data) 
    }); 

在這種情況下,echo是你想要這個回調來處理該事件類型的名稱。所以這將處理'回聲事件'。事件名稱是任意字符串,只要稱之爲有意義即可。

在啓動webview的Python腳本中,您現在可以隨時將事件發佈到註冊的處理程序。

droid.eventPost("echo", "hello world") 

這裏的第二個參數是要傳遞給JavaScript回調的消息。

請注意,儘管您將消息作爲字符串傳回,但它作爲對象到達JavaScript函數。那個對象,我們上面稱它爲msg,有一個叫做data的屬性,它包含了你從Python端傳遞過來的字符串。

0

不幸的是我從來沒有親自去過能夠得到這個工作,同時使用registerCallback()和​​3210。不過,如果你仍然渴望得到這個工作,我強烈建議你去下載並下載sl4a_r5x-一個非官方的,但更新的和更新版本的SL4A。它支持使用FullScreenUi的基於與原生Android應用程序使用的xml代碼相同的代碼。有了這個,你可以做你在做什麼,例子可以在網頁上找到。
希望這有幫助,你仍然對SL4A感興趣!

+0

其實上面的腳本工作正常:)我使用該版本的sl4a,但我仍然在等待,直到fullscreenUI變得更高效解析一些xml屬性,現在不起作用。今天,更有效的方式來編程android仍然是java或c#單聲道......因爲沒有webstyle的python gui是一個噩夢。感謝您的回答 – dyoser

+0

使用諸如jQuery Mobile UI之類的東西來構建一個接口是很簡單的,如果你不需要它看起來是本地的。 –