Javascript SL4A+Intents+Jquery+Webview

Javascript SL4A+Intents+Jquery+Webview,javascript,jquery,python,webview,sl4a,Javascript,Jquery,Python,Webview,Sl4a,我正在利用网络视图编写sl4a安卓应用程序。我试图实现从WebVIEW到Python脚本中的事件处理程序的调用,该脚本启动一个意图来从图像库中选择一个图像,并将图像路径发送到WebVIEW,以便它可以通过基础5显示模块附加到弹出屏幕,以及一个隐藏的输入标签提交。p> 我遇到的问题有两方面。我正在寻找一种正确的方法来循环registerCallback函数,直到用户单击一张照片并从python返回值为止,也就是说,在用户决定选择哪张图片时,时间是无限的。到目前为止,如果没有正在循环的sleep或s

我正在利用网络视图编写sl4a安卓应用程序。我试图实现从WebVIEW到Python脚本中的事件处理程序的调用,该脚本启动一个意图来从图像库中选择一个图像,并将图像路径发送到WebVIEW,以便它可以通过基础5显示模块附加到弹出屏幕,以及一个隐藏的输入标签提交。p> 我遇到的问题有两方面。我正在寻找一种正确的方法来循环registerCallback函数,直到用户单击一张照片并从python返回值为止,也就是说,在用户决定选择哪张图片时,时间是无限的。到目前为止,如果没有正在循环的sleep或setTimeout,它将在事件发生之前查找该事件。此外,匿名函数分配的url变量在通过if/else语句时不会被确认。我知道这是一个范围问题,但我不确定我做错了什么

Jquery代码

Python代码


对不起,我不熟悉sl4a中的webView facade,下面的示例是伪代码

你读了吗? 本文档描述了回调函数,您的代码可能是:

var droid = new Android();
function func_callback(msg) {
  if (msg.data == 'None') {return;}
  $('.PICADD').append(' /* add img tag with image path from msg.data */ ');
}

$(function(){
  droid.registerCallback('pic_select_js', func_callback);
  $('#picSelect').click(function() {
    droid.postEvent("pic_select_py");
  });
});
python方面:

import android
droid = android.Android()
droid.webViewShow('file:///sdcard/sl4a/scripts/sample.html')
while True:
    droid.waitForEvent('pic_select_py')
    url = "/where/to/pic.png"
    droid.postEvent('pic_select_js', url)

顺便说一句,删除一些逻辑之外的问题可能更好。

也许有更好的方法,但这对我很有效

它使用setTimeout设置一个非阻塞循环,以等待用户从本机android gallery和python后端选择图片发送回webview。其他任何操作都不会在回调时捕获数据,因为用户还没有选择图片,使用sleep函数阻塞js,或者它会在下一个图片选择时收集数据,导致最后选择的项目永远不会被回调以插入html以便在自定义弹出式库中提交或查看

Jquery


虽然我不久前找到了一个解决方案,却忘了发布它,但这似乎是可行的。非常感谢。我还想感谢您维护SL4A存储库并将python构建转换为PIE,这样我们就可以让android-python27在棒棒糖和其他产品上工作。如果你正在寻找贡献者,让我知道。
var droid = new Android();
function func_callback(msg) {
  if (msg.data == 'None') {return;}
  $('.PICADD').append(' /* add img tag with image path from msg.data */ ');
}

$(function(){
  droid.registerCallback('pic_select_js', func_callback);
  $('#picSelect').click(function() {
    droid.postEvent("pic_select_py");
  });
});
import android
droid = android.Android()
droid.webViewShow('file:///sdcard/sl4a/scripts/sample.html')
while True:
    droid.waitForEvent('pic_select_py')
    url = "/where/to/pic.png"
    droid.postEvent('pic_select_js', url)
$(function(){
  $('#picSelect').click( function(){
    droid._pickPic();
    waitForElement();
  });
});

function waitForElement(){
  if(typeof uri !== "undefined"){
    if( uri === 'None' ){
      uri = undefined;
      return false;
    }
    else{
      var strip = uri.split('\\').pop().split('/').pop();
      $('#pictures').append(' /* add img tag with image path */ ');
      uri = undefined;
      return true;
    }
  }
  else{
    setTimeout(function(){
        callBack();
        waitForElement();
    }, 1000);
  }
}

function callBack() {
  droid.registerCallback('picSelect', function(msg){
    uri = msg.data;
  });
}