2011-08-22 17 views
6

kullanarak javascript piton olayları göndermek python ile sl4a ve ben js python betiği olayları gönderebilirsiniz, ama js eventPost ben python dan js için aşağıdaki kodu koymuyor.Ben basit sorunun cevabını öğrenmek istedi ama ben oynuyorum iyi bir (i saatlerce google ettik :))</p> <p>bulundu have'nt sl4a

Bunun nasıl yapıldığını veya registerCallback olmadan başka bir yolu varsa herkes bilir?

HTML KODU:

<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 KODU:

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' işleviniz, aldığı bağımsız değişkeni kullanmaz. Eğer olsaydı, arg "işlevini", yani "Bitti" mesajını değerlendiren fonksiyonunuzda "data", yani data.data' adlı bir üyeye sahip olurdu. –

cevap

1

Çalışmak kolay, ancak açık veya iyi belgelenmiş değil.

İlk önce web görünümündeki Android nesnesine bir kanca almak istiyorsunuz. Sonra bir veya daha fazla geri arama kaydetmek için kullanabilirsiniz. Basit bir örnek için, Python'dan bir mesajla uyarı veren bir tane yapacağız. Bu durumda

var droid = new Android(); 

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

, echo bu geri arama işlemek istediğiniz olay türünün adıdır. Böylece bu 'eko olayları' ele alacaktır. Olay isimleri keyfi dizelerdir, sadece mantıklı olanları söyleyin.

Web görünümünü başlatan Python komut dosyasında, istediğiniz zaman kayıtlı işleyiciye etkinlik gönderebilirsiniz.

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

Buradaki ikinci bağımsız değişken, JavaScript geri bildirimlerine iletmek istediğiniz iletidir.

İletiyi bir dize olarak iletmenize rağmen, JavaScript işlevine bir nesne olarak ulaştığını unutmayın. Bu nesne, yukarıdaki msg diyoruz, Python tarafından ilettiğiniz dizeyi içeren data adlı bir özelliğe sahiptir.

0

maalesef kişisel registerCallback() ve eventWaitFor() ikisini de kullanarak, bu çalışma almak için mümkün olmamıştı. Ancak, bu işe devam etmeye hala hevesli iseniz, SL4A'nın gayri resmi, ancak daha yeni ve güncellenmiş bir sürümü olan sl4a_r5x'u indirmenizi tavsiye ederim. İçinde, FullScreenUi'un yerel Android uygulamalarının kullandığı xml kodundan yola çıkarak kullanılması desteklenmektedir. Bununla birlikte peşindeyken ne yapabilirsiniz ve örnekler sayfada bulunabilir.
Umarım bu yardımcı olmuştur ve hala SL4A ile ilgileniyorsunuz!

+0

aslında yukarıdaki betik işe yarıyor :) sl4a'nın bu sürümünü kullanıyorum ama hala fullscreenUI daha verimli hale gelinceye kadar bekliyorum bazı xml özelliklerini şimdiye kadar çalışmadı. Bugün android programlamak için daha verimli bir yol hala java veya C# ile birlikte .. bir webstyle olmadan python ile gui bir kabus. Cevabınız için teşekkürler – dyoser

+0

Yerel görünmek için ihtiyacınız yoksa bir arayüz oluşturmak için jQuery Mobile UI gibi bir şey kullanmak çok önemsiz. –

İlgili konular