android使用WebView加载html input标签调用手机相机相册 后添加扫码功能
来源:互联网 发布:翡翠台直播软件 编辑:程序博客网 时间:2024/04/29 20:44
android webview 拍照上传 package cn.com.shengchuang.webviewphoto;import android.Manifest;import android.annotation.TargetApi;import android.app.Activity;import android.content.ClipData;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.webkit.JavascriptInterface;import android.webkit.ValueCallback;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.widget.Toast;import java.io.File;import cn.com.shengchuang.webviewphoto.Zxing.CaptureActivity;public class MainActivity extends AppCompatActivity { private WebView mWebView; private ValueCallback<Uri> mUploadMessage;// 表单的数据信息 private ValueCallback<Uri[]> mUploadCallbackAboveL; private final static int FILECHOOSER_RESULTCODE = 1;// 表单的结果回调</span> private static final int REQ_CAMERA = FILECHOOSER_RESULTCODE+1;//拍照 private static final int REQ_CHOOSE = REQ_CAMERA+1; //调用相册 private Uri imageUri; private static final int CAMERA_PERMISSIONS_REQUEST_CODE = REQ_CHOOSE+1; private static final int ABLUM_PERMISSIONS_REQUEST_CODE = CAMERA_PERMISSIONS_REQUEST_CODE+1; private static final int SCAN_CODE = ABLUM_PERMISSIONS_REQUEST_CODE+1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.web); WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setRenderPriority(WebSettings.RenderPriority.HIGH); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setJavaScriptEnabled(true); settings.setSupportZoom(true); settings.setBlockNetworkImage(false); mWebView.addJavascriptInterface(this,"scan"); mWebView.loadUrl("file:///android_asset/addfigure.html"); /** * 不同手机相机相册兼容问题 */ mWebView.setWebChromeClient(new MyWebChromeClient()); } @JavascriptInterface public void openScan(){ Intent intent = new Intent(MainActivity.this, CaptureActivity.class); startActivityForResult(intent, SCAN_CODE); } /** * android webview 兼容相机相册选择 */ public class MyWebChromeClient extends WebChromeClient{ // For Android >= 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback,FileChooserParams fileChooserParams) { mUploadCallbackAboveL = filePathCallback; takePhoto(); return true; } // For Android < 3.0 public void openFileChooser(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; takePhoto(); } // For Android >= 3.0 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { mUploadMessage = uploadMsg; takePhoto(); } //For Android >= 4.1 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; takePhoto(); } } public void takePhoto(){ //弹出提示框 new CommomDialog(this,new CommomDialog.CameraOpenListener(){ @Override public void onClick(CommomDialog c) { checkCameraPermission(); c.dismiss(); } },new CommomDialog.AblumOpenListener(){ @Override public void onClick(CommomDialog c) { showAblum(); c.dismiss(); } }) .show(); } /** * 调用相机权限控制 */ public void checkCameraPermission(){ if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_PERMISSIONS_REQUEST_CODE); }else{ showCamera(); } } /** * 调用相机 */ public void showCamera(){ File tempFile = new File(Environment.getExternalStorageDirectory(),"image.jpg"); imageUri = Uri.fromFile(tempFile); Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(openCameraIntent,REQ_CAMERA); } /** * 相册权限控制 */ public void checkAblumPermission(){ if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, ABLUM_PERMISSIONS_REQUEST_CODE); }else{ showAblum(); } } /** * 调用相册 */ public void showAblum(){ Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.addCategory(Intent.CATEGORY_OPENABLE); openAlbumIntent.setType("image/*"); startActivityForResult(openAlbumIntent,REQ_CHOOSE); } /** * 权限处理回掉 * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == CAMERA_PERMISSIONS_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //申请成功,可以拍照 showCamera(); } else { Toast.makeText(MainActivity.this,"你拒绝了权限,该功能不可用\n可在应用设置里授权拍照哦",Toast.LENGTH_SHORT).show(); } return; } if(requestCode == ABLUM_PERMISSIONS_REQUEST_CODE){ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //申请成功 showAblum(); } else { Toast.makeText(MainActivity.this,"你拒绝了权限,该功能不可用\n可在应用设置里授权查看相册哦",Toast.LENGTH_SHORT).show(); } return; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQ_CAMERA||requestCode == REQ_CHOOSE) { if (null == mUploadMessage && null == mUploadCallbackAboveL) return; Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); if (mUploadCallbackAboveL != null) { onActivityResultAboveL(requestCode, resultCode, data); } else if (mUploadMessage != null) { mUploadMessage.onReceiveValue(result); mUploadMessage = null; } }else if(requestCode == SCAN_CODE){ String arg = data.getStringExtra("result"); mWebView.loadUrl("javascript:receptionResult('" +arg + "')"); } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) { Uri[] results = null; if (resultCode == Activity.RESULT_OK) { if (data == null) { results = new Uri[]{imageUri}; } else { String dataString = data.getDataString(); ClipData clipData = data.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)}; } } if (results != null) { mUploadCallbackAboveL.onReceiveValue(results); mUploadCallbackAboveL = null; } else { results = new Uri[]{}; mUploadCallbackAboveL.onReceiveValue(results); mUploadCallbackAboveL = null; } return; }}源码地址:https://github.com/binbinwei/android-webview-camera-ablum.git
阅读全文
0 0
- android使用WebView加载html input标签调用手机相机相册 后添加扫码功能
- Androoid WebView加载html调用手机拍照和相册
- Android调用相机或选择相册后加载图片内存不足
- 关于android webview调用相册和相机
- 关于android webview调用相册和相机
- android调用手机相机、相册,设置头像
- android 调用系统相机、相册剪切功能
- Android调用相机,相册
- HTML5调用手机摄像机、相册功能 <input>方法
- HTML5调用手机摄像机、相册功能 <input>方法
- 调用相机相册+裁剪功能
- Android调用手机相机和相册拿到图片保存上传
- android使用WebView来打开文件选择器(相机,相册,曲目)
- 调用手机相机功能
- Android完美调用系统相机、相册以及裁剪功能
- Android调用系统相机和相册添加图片到
- Android webview加载iframe标签的HTML
- 关于input在苹果和安卓手机上调用相机和相册的问题
- Mysql 分组聚合实现 over partition by 功能
- Android面试复习(Android篇三)
- HDU-4609 3-idiots(FFT)
- KL距离(相对熵)
- Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
- android使用WebView加载html input标签调用手机相机相册 后添加扫码功能
- 3.物理路径 绝对路径 相对路径
- Spring配置文件XML理解
- ls命令
- POI读取Excel
- obj_tpl->SetCallAsFunctionHandler(Call, Handle<Value>());
- 欢迎使用CSDN-markdown编辑器
- C++:函数模板
- linq中的tolist()方法什么意思