我正在使用一个显示一些不错的 HTML 的 WebView。应从图片库中选择其中一张图片并显示在 WebView 中。
所以,基本上,我需要 Javascript 来访问 Java(以便打开图库),以及 Java 来访问 Javascript(以获取返回结果)
我使用了以下代码:
public class JavaScriptInterface
{
Context mContext;
Uri currImageURI;
JavaScriptInterface(Context c)
{
mContext = c;
}
public void imageFromGallery()
{
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
String retResult="";
if (resultCode == RESULT_OK)
{
if (requestCode == 1)
{
currImageURI = data.getData();
retResult=getRealPathFromURI(currImageURI);
}
}
mWebView.loadUrl("javascript:updateImage("+retResult+")");
}
public String getRealPathFromURI(Uri contentUri)
{
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( contentUri,proj,null,null,null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
现在,从我的脚本调用 Java 工作正常。我添加了一个 onClick="Android.imageFromGallery()"
,它可以正确打开图库。
顺便说一句 - 它让我在 Astro、文件管理器和画廊之间进行选择。我怎样才能将它限制为 Gallery,这样它就不会询问用户使用哪个文件浏览器?
不管怎么说,Java 调用Javascript 传递结果,问题就来了。
显然 updateImage()
(我的 JS 函数只显示图像名称)没有从 Java 代码调用。
我在这里做错了什么?
编辑:解决了第一个问题——我可以直接调用画廊
Intent getImageFromGalleryIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(getImageFromGalleryIntent, 1);
最佳答案
解决了! 错误是将 onActivityResult 作为一个函数添加到 JavascriptInterface 类中,而它需要在它之外,在 WebView 定义中。
(之前自己的问题没法回答,因为我的声望不够高,所以要等几个小时)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if (requestCode == 1)
{
Uri currImageURI = data.getData();
String retResult = getRealPathFromURI(currImageURI);
mWebView.loadUrl("javascript:updateImage('"+retResult+"')");
}
}
}
public String getRealPathFromURI(Uri contentUri)
{
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( contentUri,proj,null,null,null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
public class JavaScriptInterface
{
Context mContext;
Uri currImageURI;
JavaScriptInterface(Context c)
{
mContext = c;
}
public void imageFromGallery()
{
Intent getImageFromGalleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(getImageFromGalleryIntent, 1);
}
}
}
关于Android:以编程方式从 WebView 中的图片库获取 IMG SRC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6214437/