Android:以编程方式从 WebView 中的图片库获取 IMG SRC

标签 android webview android-webview

我正在使用一个显示一些不错的 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/

相关文章:

android - android中的"Ə"字符

android - 具有自定义 View 的不同 packageNameSuffix

android - 如何从Android中的视频文件中获取特定时间帧的图像?

ios - 在 WebView 中打开,而不是在 iOS 上打开深层链接

android - WebView 在加载 www.google.com 时导致 Uncaught TypeError

android - WebView.loadDataWithBaseUrl 不显示图像

android - 如何从 Android WebView 中的远程 URL 访问本地资源?

android - 移动设备模拟如何工作?

android - 连接两个音频文件并播放生成的文件

Android:WebView滚动动画