Я использую WebView, который отображает хороший HTML. Одно из изображений должно быть выбрано из галереи изображений и отображено в 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, File Manager и Gallery. Как я могу ограничить его галереей, чтобы он не спрашивал пользователя, какой файловый браузер использовать?
В любом случае, проблема заключается в том, что Java вызывает Javascript для передачи результата.
Очевидно, updateImage()
(моя функция JS, которая просто показывает имя изображения) не получает вызова из кода Java.
Что я здесь не так делаю?
РЕДАКТИРОВАТЬ: решена первая проблема - я могу напрямую позвонить в Галерею, используя
Intent getImageFromGalleryIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(getImageFromGalleryIntent, 1);