簡體   English   中英

Android:以編程方式從 WebView 中的圖像庫中獲取 IMG SRC

[英]Android: Programmatically Get IMG SRC from Image Gallery within WebView

我使用的是 WebView,它顯示了一些不錯的 HTML。 其中一張圖片應從圖片庫中選擇並顯示在 WebView 中。

So, basically, I need Javascript to access Java (in order to open the Gallery), as well as Java to access Javascript (to get the result back)

我使用了以下代碼:

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、文件管理器和圖庫之間進行選擇。 如何將其限制為圖庫,以便它不會詢問用戶使用哪個文件瀏覽器?

無論如何,問題出在 Java 調用 Javascript 以傳遞結果。 顯然updateImage() (我的 JS function 僅顯示圖像名稱)沒有收到來自 Java 代碼的調用。

我在這里做錯了什么?

編輯:解決了第一個問題 - 我可以直接調用畫廊使用

Intent getImageFromGalleryIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI); startActivityForResult(getImageFromGalleryIntent, 1);

已解決,錯誤是將 onActivityResult 作為 function 添加到 JavascriptInterface class 內,而它需要在它之外。 在 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);
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM