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

时间:2011-06-02 12:22:40

标签: android webview android-webview

我正在使用一个显示一些不错的HTML的WebView。其中一张图片应从图片库中选择并显示在WebView中。

所以,基本上,我需要Javascript来访问Java(为了打开Gallery),以及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);

1 个答案:

答案 0 :(得分: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);
        }
    }

}