- JavaScript (HTML, CSS, Jquery Mobile, etc.) ใช้สำหรับสร้างแอป AR และระบบการทำงานโดยส่วนใหญ่ของแอปพลิเคชั่น
- Java จะเรียกใช้แอปที่สร้างด้วย JS มาแสดงผล และระบบการทำงานที่เกี่ยวกับ Hardware เช่น ตั้งค่าความละเอียดกล้อง, การเรียกใช้ GPS
ภาพตัวอย่าง คำสั่งการเรียกใช้แอปที่สร้างด้วย JS เพื่อมาแสดงผล
การส่งค่า GPS จาก Java ไปสู่ JavaScript
ใน Java เราจะใช้คำสั่งจาก Library ของ Wikitude คือ ArchitectView.setLocation() เพื่อเซ็ตค่าบอกให้ Wikitude API รู้ว่าเรากำลังอยู่ที่ตำแหน่งไหน
ส่วนใน JavaScript ก็จะมีฟังก์ชั่น AR.context.onLocationChanged() ที่จะถูกเรียกอัตโนมัติเมื่อค่าตำแหน่งใน Wikitude API มีการเปลี่ยนแปลง วิธีใช้คือให้ทำการ override ฟังก์ชั่นนี้แล้วทำการเพิ่ม statement ที่ต้องการลงไป
Java เรียกใช้ฟังก์ชั่นของ JavaScript ได้
โดยใช้คำสั่ง architectView.callJavascript("") เช่น จะเรียกใช้ฟังก์ชั่น resetDropdown ก็จะใช้คำสั่ง architectView.callJavascript("resetDropdown()") เป็นต้น ซึ่งคำสั่งนี้จะสามารถเรียกใช้ฟังก์ชั่นของ JS ได้อย่างเดียว ไม่สามารถที่จะรับค่าจะฟังก์ชั่นที่มีการ return ค่าได้
JavaScript ไม่สามารถเรียกใช้ฟังก์ชั่น Java ได้ แต่สามารถส่ง JSON Object ให้ Java ได้
โดยจะส่งค่าผ่านคำสั่ง AR.platform.sendJSONObject() ใน JavaScript ส่วนใน Java จะต้องทำการเรียกใช้ ArchitectView.addArchitectJavaScriptInterfaceListener(this); ก่อน ซึ่งควรเรียกใช้ใน onCreate() เพื่อจะได้เรียกใช้ตั้งแต่เปิดแอปพลิเคชั่น และควรใส่ ArchitectView.removeArchitectJavaScriptInterfaceListener(this); ไว้ใน onDestroy() เพื่อที่จะ remove listener ออกเมื่อปิดแอป
การรับค่าที่ JavaScript ส่งมาสามารถทำได้โดยการ override ฟังก์ชั่น onJSONObjectReceived() ใน Java ที่จะถูกเรียกใช้ทุกคร้ังเมื่อมีการส่ง JSON Object มา
ตัวอย่างการใช้งาน
ต้องการจะส่งค่า State จาก JS มาเก็บไว้ที่ Java โดยใช้คำสั่ง AR.platform.sendJSONObject({action: "sendState", state: "home"}); ก็จะทำการ override ฟังก์ชั่น onJSONObjectReceived() ออกมาได้ดังนี้
สาเหตุที่ต้องส่ง action มา และ override onJSONObjectReceived() ออกมาเป็นรูปแบบของ Switch-Case ก็เพราะเผื่อในอนาคตเราต้องการที่จะส่งค่า JSON Object อย่างอื่นที่ไม่เกี่ยวกับเรื่อง state เข้ามาก็จะได้แบ่งการทำงานแยกกันได้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น