sl4a

2011-08-22 25 views
6

का उपयोग कर मैं एक साधारण सवाल का जवाब जानना चाहता था, लेकिन मैं have'nt एक अच्छा (मैं घंटों के लिए इसे गूगल है :))sl4a

मैं खेल रहा हूँ पाया जावास्क्रिप्ट को अजगर से घटनाओं भेज python के साथ sl4a के साथ और मैं जेएस से पायथन लिपि में घटनाएं भेज सकता हूं, लेकिन जेएस घटना को पकड़ नहीं रहा है पोस्ट मैं पाइथन से जेएस तक नीचे दिए गए कोड में डालता हूं।

कोई भी जानता है कि यह कैसे किया गया है या यदि रजिस्टर के बिना कोई दूसरा तरीका है?

एचटीएमएल कोड:

<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

आपका जेएस 'alert_me' फ़ंक्शन इसे प्राप्त तर्क का कोई उपयोग नहीं करता है। यदि ऐसा होता है, तो तर्क में आपके खाते में 'डेटा'' नामक एक सदस्य होता है, इसलिए आपके डेटा में 'data.data'' होता है, जो "पूर्ण संदेश" का मूल्यांकन करेगा। –

उत्तर

1

यह काम करना आसान है, लेकिन यह स्पष्ट या अच्छी तरह से प्रलेखित नहीं है।

सबसे पहले आप वेबदृश्य के अंदर Android ऑब्जेक्ट को हुक प्राप्त करना चाहते हैं। फिर आप इसे एक या अधिक कॉलबैक पंजीकृत करने के लिए उपयोग कर सकते हैं। एक साधारण उदाहरण के लिए, हम केवल एक ऐसा करेंगे जो पाइथन से संदेश के साथ अलर्ट पॉप करता है।

var droid = new Android(); 

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

इस मामले में, echo आप इस कॉलबैक हैंडल करना चाहते घटना प्रकार का नाम है। तो यह 'गूंज घटनाओं' को संभालेगा। घटना के नाम मनमाने ढंग से तार हैं, बस उन्हें जो कुछ भी समझ में आता है उसे बुलाओ।

पाइथन लिपि में जिसने वेबव्यू लॉन्च किया, अब आप जब चाहें पंजीकृत हैंडलर को ईवेंट पोस्ट कर सकते हैं।

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

यहाँ दूसरा तर्क संदेश आप जावास्क्रिप्ट कॉलबैक को पास करना चाहते है।

ध्यान दें कि यद्यपि आप एक स्ट्रिंग के रूप में संदेश वापस भेजते हैं, यह जावास्क्रिप्ट फ़ंक्शन में ऑब्जेक्ट के रूप में आता है। उस ऑब्जेक्ट, हम इसे msg पर कॉल कर रहे हैं, इसमें data नामक एक विशेषता है जिसमें आपके द्वारा पाइथन पक्ष से पारित स्ट्रिंग शामिल है।

0

दुर्भाग्य से मैं व्यक्तिगत रूप से इस काम के प्राप्त करने के लिए, registerCallback() और eventWaitFor() दोनों का उपयोग कर कभी सक्षम नहीं किया गया है। हालांकि, अगर आप अभी भी इस काम को प्राप्त करने के इच्छुक हैं, तो मैं दृढ़ता से अनुशंसा करता हूं कि आप आगे बढ़ें और sl4a_r5x डाउनलोड करें - एक अनधिकृत लेकिन एसएल 4 ए की नई और अद्यतन रिलीज। इसमें FullScreenUi का उपयोग करने के लिए समर्थन है जो उसी एंड्रॉइड ऐप्स का उपयोग करते हैं, जो मूल एंड्रॉइड ऐप्स का उपयोग करते हैं। इसके साथ आप जो भी कर रहे हैं वह कर सकते हैं और पेज पर उदाहरण मिल सकते हैं।
उम्मीद है कि यह सहायक रहा है और आप अभी भी SL4A में रुचि रखते हैं!

+0

वास्तव में उपरोक्त स्क्रिप्ट ठीक काम करता है :) मैं sl4a के उस संस्करण का उपयोग कर रहा हूं, लेकिन मैं अभी भी प्रतीक्षा कर रहा हूं जब तक कि पूर्णस्क्रीन यूआई कुछ एक्सएमएल गुणों को पार्स करने में अधिक सक्षम हो जाए जो अब तक काम नहीं कर पा रहे हैं। आज एंड्रॉइड प्रोग्राम के लिए अधिक प्रभावी तरीका मोनो के साथ जावा या सी # है ... क्योंकि बिना वेबस्टाइल के पाइथन के साथ गुई एक दुःस्वप्न है। आपके उत्तर के लिए धन्यवाद – dyoser

+0

यदि आप मूल रूप से देखने की आवश्यकता नहीं है, तो इंटरफ़ेस बनाने के लिए jQuery मोबाइल UI जैसे कुछ का उपयोग करना मुश्किल है। –