WebViewで見ているページで、formのファイル選択ボタンがあったとします。
Android端末の中に保存している画像の選択をするには、ちょっと普段と違った実装をしなくてはなりません。
普通に実装しているだけでformボタンが無効化されてしまいます。
public class WebActivity extends Activity { //エコー写真のファイル送信を可能にする final private int INTENT_CODE = 101; private ValueCallback<Uri> mUploadMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_webview); // WebViewインスタンスを取得 WebView webView = (WebView) findViewById(R.id.webView); // WebViewの設定 webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); webView.setVerticalScrollbarOverlay(true); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); // WebViewClientを継承 webView.setWebChromeClient(new WebChromeClient() { // /Android 4.1以上 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "画像選択"), INTENT_CODE); } // Android 3.0以上 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "画像選択"), INTENT_CODE); } // Android 3.0未満 public void openFileChooser(ValueCallback<Uri> uploadMsg) { openFileChooser(uploadMsg, "", ""); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == INTENT_CODE) { if (null == mUploadMessage) return; Uri result = (intent == null || resultCode != RESULT_OK) ? null : intent.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; } }
コメントを残す