[英]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.