H5 调 android 相机和相册

来源:互联网 发布:门诊电子病历软件 编辑:程序博客网 时间:2024/06/05 18:46

public class IndexActivity extends AppCompatActivity {

private ValueCallback<Uri> uploadMessage;private ValueCallback<Uri[]> uploadMessageAboveL;private final static int FILE_CHOOSER_RESULT_CODE = 10000;private final static int REQUEST_CODE_CAMERA = 10001;private WebView mWebview;private WebSettings mSettings;private LinearLayout mSelectView;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_index);    mWebview = (WebView) findViewById(R.id.web_view);    mSelectView = (LinearLayout) findViewById(R.id.select_view);    initWebView();}private void initWebView() {    // 网页加载    mSettings = mWebview.getSettings();    mSettings.setDefaultTextEncodingName("utf-8");    mSettings.setJavaScriptEnabled(true);    mWebview.setWebViewClient(client);    // 弹出对话框    mWebview.setWebChromeClient(chromeClient);    mWebview.loadUrl("http://webapp.sktap.cn/hjytest/taikang/input/");}private WebChromeClient chromeClient = new WebChromeClient() {    @Override    public void onProgressChanged(WebView view, int newProgress) {        super.onProgressChanged(view, newProgress);    }    // For Android 3.0+    public void openFileChooser(ValueCallback<Uri> uploadMsg) {        uploadMessage = uploadMsg;        openImageChooserActivity();    }    // For Android 3.0+    public void openFileChooser(ValueCallback uploadMsg, String acceptType) {        uploadMessage = uploadMsg;        openImageChooserActivity();    }    //For Android 4.1    public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {        uploadMessage = uploadMsg;        openImageChooserActivity();    }    // For Android >= 5.0    @Override    public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> valueCallback, FileChooserParams fileChooserParams) {        uploadMessageAboveL = valueCallback;        openImageChooserActivity();        return true;    }};private void openImageChooserActivity() {    mSelectView.setVisibility(View.VISIBLE);}private String path;public void chooserForCamera(View v) {    mSelectView.setVisibility(View.INVISIBLE);    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    //path为保存图片的路径,执行完拍照以后能保存到指定的路径下    path = getExternalFilesDir(Environment.DIRECTORY_MOVIES) + "/" + System.currentTimeMillis() + ".jpg";    File file = new File(path);    Uri imageUri = Uri.fromFile(file);    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);    startActivityForResult(intent, REQUEST_CODE_CAMERA);}public void chooserForAlbum(View v) {    mSelectView.setVisibility(View.INVISIBLE);    Intent i = new Intent(Intent.ACTION_GET_CONTENT);    i.addCategory(Intent.CATEGORY_OPENABLE);    i.setType("image/*");    startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == FILE_CHOOSER_RESULT_CODE) {        if (null == uploadMessage && null == uploadMessageAboveL) return;        Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();        if (uploadMessageAboveL != null) {            onActivityResultAboveL(requestCode, resultCode, data);        } else if (uploadMessage != null) {            uploadMessage.onReceiveValue(result);            uploadMessage = null;        }    } else if (requestCode == REQUEST_CODE_CAMERA) {        if (null == uploadMessage && null == uploadMessageAboveL) return;        if (uploadMessageAboveL != null) {            onActivityResultAboveL(requestCode, resultCode, data);        } else if (uploadMessage != null) {            File file = new File(path);            Uri imageUri = Uri.fromFile(file);            uploadMessage.onReceiveValue(imageUri);            uploadMessage = null;        }    }}@TargetApi(Build.VERSION_CODES.LOLLIPOP)private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {    if (requestCode == FILE_CHOOSER_RESULT_CODE && uploadMessageAboveL != null) {        Uri[] results = null;        if (resultCode == Activity.RESULT_OK) {            if (intent != null) {                String dataString = intent.getDataString();                ClipData clipData = intent.getClipData();                if (clipData != null) {                    results = new Uri[clipData.getItemCount()];                    for (int i = 0; i < clipData.getItemCount(); i++) {                        ClipData.Item item = clipData.getItemAt(i);                        results[i] = item.getUri();                    }                }                if (dataString != null) results = new Uri[]{Uri.parse(dataString)};            }        }        uploadMessageAboveL.onReceiveValue(results);        uploadMessageAboveL = null;    } else if (requestCode == REQUEST_CODE_CAMERA && uploadMessageAboveL != null) {        File file = new File(path);        Uri imageUri = Uri.fromFile(file);        Uri[] results = new Uri[]{imageUri};        uploadMessageAboveL.onReceiveValue(results);        uploadMessageAboveL = null;    }}private WebViewClient client = new WebViewClient() {    @Override    public void onPageFinished(WebView view, String url) {        super.onPageFinished(view, url);    }    @Override    public void onPageStarted(WebView view, String url, Bitmap favicon) {        super.onPageStarted(view, url, favicon);    }    @Override    public boolean shouldOverrideUrlLoading(WebView view, String url) {        view.loadUrl(url);        return true;    }    @Override    public void onReceivedError(WebView view, int errorCode, String description,                                String failingUrl) {        super.onReceivedError(view, errorCode, description, failingUrl);    }};

}

原创粉丝点击