2011-08-22 1 views
6

를 사용하여 자바 스크립트에 파이썬에서 이벤트를 전송 sl4a와 함께 파이썬과 나는 js에서 파이썬 스크립트로 이벤트를 보낼 수 있지만 js는 eventPost를 잡아 내지 못하고있다. 파이썬에서 js에 이르기까지 코드에 넣었다.내가 간단한 질문에 대한 답을 알고 싶어하지만 난 내가 놀고있어 좋은 (내가 시간 동안 구글했습니다 :))</p> <p>을 발견 have'nt SL4A

누구든지이 작업이 어떻게 완료되었는지 또는 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> 

파이썬 코드 :

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

이것은 작동하기 쉽지만 명확하지 않거나 잘 설명되어 있지 않습니다.

먼저 웹보기에서 Android 개체에 연결하고 싶습니다. 그런 다음 하나 이상의 콜백을 등록하는 데 사용할 수 있습니다. 간단한 예를 들어, 우리는 파이썬으로부터의 메시지로 경보를 울리는 작업을 수행 할 것입니다. 이 경우

var droid = new Android(); 

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

, echo은이 콜백 처리 할 이벤트 유형의 이름입니다. 그러면 '반향 이벤트'가 처리됩니다. 이벤트 이름은 임의의 문자열이며, 의미가있는 모든 것을 호출합니다.

webview를 시작한 Python 스크립트에서 언제든지 등록 된 처리기에 이벤트를 게시 할 수 있습니다.

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

여기서 두 번째 인수는 JavaScript 콜백에 전달할 메시지입니다.

메시지를 문자열로 다시 전달하더라도 JavaScript 함수에서 개체로 도착한다는 점에 유의하십시오. 위의 객체는 msg이고, data이라는 속성이 있습니다.이 속성에는 파이썬 측에서 전달한 문자열이 들어 있습니다.

0

불행하게도 나는 개인적으로 registerCallback()eventWaitFor()을 모두 사용하여이 작업을 얻을 수 없었습니다. 그러나이 작업을 계속하기를 원한다면 비공식이지만 최신이고 업데이트 된 SL4A 릴리스 인 sl4a_r5x을 다운로드하는 것이 좋습니다. 이 기능은 기본 Android 앱에서 사용하는 것과 동일한 xml 코드를 기반으로 FullScreenUi을 사용하도록 지원합니다. 이것으로 당신은 당신이하고있는 것을 할 수 있고, 예제는 페이지에서 찾을 수 있습니다.
잘하면이 도움이되었으며 SL4A에 관심이 있습니다!

+0

사실 실제로 위의 스크립트가 작동합니다. sl4a의 해당 버전을 사용하고 있지만 fullscreenUI가 더 효율적으로 작동 할 때까지 기다리는 중이므로 지금까지 작동하지 않은 일부 XML 속성을 파싱합니다. 오늘날 안드로이드를 프로그래밍하는 더 효율적인 방법은 여전히 ​​자바 또는 C# 모노입니다. 왜냐하면 웹 스타일이없는 파이썬의 GUI는 악몽입니다. 답해 주셔서 감사합니다 – dyoser

+0

jQuery Mobile UI와 같은 것을 사용하여 인터페이스를 구축하는 것이 쉽습니다. –

관련 문제