現在、WebViewを使ったandroidアプリを開発しています。
その中で、<input type="file">の要素をクリックした時にギャラリーやカメラを起動し、選択/撮影した画像をアップロードしたいのですが、うまくいっていません。
以下のページを参考にWebChromeClientを実装したのですが、onShowFileChooser / openFileChooser が実行されず、その原因が分からない状況です。
【Qiita】LollipopのWebViewでinput type fileで画像アップロード
【Qiita】androidのwebViewでinput type fileに対応する
Android OSのバージョンは5.0です。
また、実装したWebChromeClient拡張クラスは以下になります。
Java
1protected class MyWebChromeClient extends WebChromeClient { 2 3 private static final String TAG = "MyWebChromeClient"; 4 5 /** 6 * JSのアラートをトースト表示にする 7 */ 8 @Override 9 public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 10 Log.d("onJsAlert", url); 11 Log.d("onJsAlert", message); 12 Log.d("onJsAlert", result.toString()); 13 Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 14 //return super.onJsAlert(view, url, message, result); 15 return true; 16 } 17 18 @Override 19 public boolean onConsoleMessage(@NonNull ConsoleMessage cm) { 20 Log.d(TAG, cm.message() + " -- From line " 21 + cm.lineNumber() + " of " 22 + cm.sourceId()); 23 return true; 24 } 25 26 /** 27 * input type="file" 対応 (androidOS 5.0 以上) 28 */ 29 @Override 30 public boolean onShowFileChooser(WebView webView, 31 ValueCallback<Uri[]> filePathCallback, 32 FileChooserParams fileChooserParams) 33 { 34 Log.d(TAG, "onShowFileChooser started."); 35 Toast.makeText(context, "ファイルを選択して下さい", Toast.LENGTH_LONG).show(); 36 super.onShowFileChooser(webView, filePathCallback, fileChooserParams); 37 if( mUploadMessageForAfterLollipop != null) { 38 mUploadMessageForAfterLollipop.onReceiveValue(null); 39 mUploadMessageForAfterLollipop = null; 40 } 41 mUploadMessageForAfterLollipop = filePathCallback; 42 Intent i = fileChooserParams.createIntent(); 43 try { 44 ItemListViewActivity.this.startActivityForResult(i, FILE_CHOOSER_RESULT_CODE); 45 } catch (ActivityNotFoundException e) { 46 mUploadMessageForAfterLollipop = null; 47 return false; 48 } 49 return true; 50 } 51 52 // input type="file" 対応 (androidOS 4.1) 53 // 参考URL : http://qiita.com/masahide318/items/06af79ed8081ef725d76 54 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { 55 Log.d(TAG, "openFileChooser start"); 56 Log.d(TAG, "acceptType : " + acceptType); 57 Log.d(TAG, "capture : " + capture); 58 59 mUploadMessage = uploadMsg; 60 Intent i = new Intent(Intent.ACTION_GET_CONTENT); 61 i.addCategory(Intent.CATEGORY_OPENABLE); 62 i.setType("image/*"); 63 startActivityForResult(Intent.createChooser(i, "title"), FILE_CHOOSER_RESULT_CODE); 64 } 65 66 // input type="file" 対応 (androidOS 3.0 以上) 67 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { 68 openFileChooser(uploadMsg, acceptType, ""); 69 } 70 71 // input type="file" 対応 (androidOS 3.0 未満) 72 public void openFileChooser(ValueCallback<Uri> uploadMsg) { 73 openFileChooser(uploadMsg, "", ""); 74 } 75}
ご教授いただける事などありましたら、よろしくお願い致します。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。