2011-06-02 57 views
1

我正在使用顯示一些漂亮的HTML的WebView。其中一張圖片應該從圖片庫中選擇並顯示在WebView中。Android:以編程方式從WebView中的圖像庫獲取IMG SRC

所以,基本上,我需要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,文件管理器和圖庫之間做出選擇。我如何限制它到圖庫中,以便它不要求用戶使用哪個文件瀏覽器?

無論如何,問題出現在Java調用Javascript來傳遞結果。 顯然updateImage()(我的JS函數只顯示圖像名稱)沒有從Java代碼中調用。

我在這裏做錯了什麼?

編輯:解決了第一個問題 - 我可以用

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

+0

您是否嘗試過'mWebView.loadUrl(「JavaScript的: function(){alert('working')}「);'只是爲了檢查JS調用是否被執行?這可能是因爲webview可能如何處理調用上下文,您將不得不在匿名函數中包裝JS調用。這只是一個預感。 – Audrius 2011-06-02 12:34:35

+0

不,JS根本沒有被調用,即使我按你的建議包裝它:( – Ema 2011-06-02 12:48:04

+0

所以下一個問題:loadUrl工作嗎?嘗試把一個真正的URL而不是JS調用,並看到它加載到你的WebView中。 – Audrius 2011-06-02 12:52:41

回答

1

解決直接調用圖庫! 錯誤在於在WebView定義中將onActivityResult作爲JavascriptInterface類中的一個函數添加,而它需要在它之外。

(我不能回答之前我自己的問題,因爲我的名氣不夠高,所以我不得不等待幾個小時)

@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); 
     } 
    } 

} 
相關問題