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