由于业务需要,APP内嵌H5,需要调去系统相册和拍照,网上找了点资料,整理一下,供大家参考:

private static final int REQUEST_CAMERA =1;

private static final int REQUEST_CHOOSE =2;

private ValueCallbackmUploadMessage;

private ValueCallbackmUploadMessagesAboveL;

private UricameraUri;

//5.0以后的方法

webView.setWebChromeClient(new WebChromeClient() {

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {

if (mUploadMessagesAboveL !=null) {

mUploadMessagesAboveL.onReceiveValue(null);

mUploadMessagesAboveL =null;

}else {

mUploadMessagesAboveL = filePathCallback;

selectImage();

}

return true;

}

});

//选择图片和拍照,对应的string文件,可以自己写死:拍照,相册,取消

private void selectImage() {

ActionSheet.createBuilder(this, getSupportFragmentManager()).

setOtherButtonTitles(new String[]{getResources().getString(R.string.common_tip_photos), getResources().getString(R.string.common_picture)}).

setCancelButtonTitle(getResources().getString(R.string.common_cancel)).setCancelableOnTouchOutside(true).setListener(new ActionSheet.ActionSheetListener() {

public void onDismiss(ActionSheet actionSheet, boolean isCancel) {

if (mUploadMessage !=null) {

mUploadMessage.onReceiveValue(null);

mUploadMessage =null;

}

if (mUploadMessagesAboveL !=null) {

mUploadMessagesAboveL.onReceiveValue(null);

mUploadMessagesAboveL =null;

}

actionSheet.dismiss();

}

@RequiresApi(api = Build.VERSION_CODES.M)

public void onOtherButtonClick(ActionSheet actionSheet, int index) {

switch (index) {

case 0:

chosePicture();

break;

case 1:

setRequestCamera();

}

}

}).show();

}

//拍照,添加权限申请  这个可以自己写下,我这边是项目中写好的,直接拿过来用了

public void setRequestCamera() {

permissionsBuilder =new YXTPermissionsBuilder.Builder(this)

.setOnGrantedListener((requestCode, perms) -> {

openCamera();

})

.setRationale4NeverAskAgain(LanguageUtils.isEnglish() ? String.format(getString(R.string.permission_tips), getString(R.string.common_camera), getString(R.string.app_name), getString(R.string.app_name)) :

String.format(getString(R.string.permission_tips), getString(R.string.app_name), getString(R.string.common_camera), getString(R.string.app_name)))

//必需

.setRequestCode(ConstantsData.GET_CAMERA)

.build();

permissionsBuilder.requestPermissions(Manifest.permission.CAMERA);

}

/**

* 本地相册选择图片

*/

private void chosePicture() {

Intent innerIntent =new Intent(Intent.ACTION_GET_CONTENT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

innerIntent.setType("image/*");

Intent wrapperIntent = Intent.createChooser(innerIntent, null);

startActivityForResult(wrapperIntent, REQUEST_CHOOSE);

}

/**

* 打开照相机

*/

private void openCamera() {

Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

String imagePaths = Environment.getExternalStorageDirectory().getPath() +"/pbccrc/Images/" + (System.currentTimeMillis() +".jpg");

// 必须确保文件夹路径存在,否则拍照后无法完成回调

File vFile =new File(imagePaths);

if (!vFile.exists()) {

File vDirPath = vFile.getParentFile();

vDirPath.mkdirs();

}else {

if (vFile.exists()) {

vFile.delete();

}

}

cameraUri = FileProvider.getUriForFile(

this,

getPackageName() +".fileprovider",

vFile);

intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);

startActivityForResult(intent, REQUEST_CAMERA);

}

/**

* 选择照片后结束

*

* @param data

*/

private UriafterChosePic(Intent data) {

if (data !=null) {

final String path = data.getData().getPath();

if (path !=null && (path.endsWith(".png") || path.endsWith(".PNG") || path.endsWith(".jpg") || path.endsWith(".JPG"))) {

return data.getData();

}else {

Toast.makeText(this, "上传的图片仅支持png或jpg格式", Toast.LENGTH_SHORT).show();

}

}

return null;

}

/**

* 返回文件选择

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

if (mUploadMessagesAboveL !=null) {

onActivityResultAboveL(requestCode, resultCode, intent);

}

if (mUploadMessage ==null)return;

Uri uri =null;

if (requestCode ==REQUEST_CAMERA && resultCode ==RESULT_OK) {

uri =cameraUri;

Log.e("onActivityResult: " + uri.toString());

}

if (requestCode ==REQUEST_CHOOSE && resultCode ==RESULT_OK) {

uri = afterChosePic(intent);

}

mUploadMessage.onReceiveValue(uri);

mUploadMessage =null;

super.onActivityResult(requestCode, resultCode, intent);

}

/**

* 5.0以后机型 返回文件选择

*

* @param requestCode

* @param resultCode

* @param data

*/

private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {

Uri[] results =null;

if (requestCode ==REQUEST_CAMERA && resultCode ==RESULT_OK) {

results =new Uri[]{cameraUri};

}

if (requestCode ==REQUEST_CHOOSE && resultCode ==RESULT_OK) {

if (data !=null) {

String dataString = data.getDataString();

if (dataString !=null)

results =new Uri[]{Uri.parse(dataString)};

}

}

mUploadMessagesAboveL.onReceiveValue(results);

mUploadMessagesAboveL =null;

return;

}

基本都可以拿去用了,希望有帮助

android webview capturepicture,Android WebView 调用系统拍照和相册相关推荐

  1. MVP模式的Android 调用系统拍照,相册,剪裁,适配到7.0,修复拍照图片旋转问题

    Android 调用系统拍照,相册,剪裁,适配到7.0,修复拍照图片旋转问题 直接上代码 首先添加拍照需要的权限 <uses-permission android:name="andr ...

  2. android调用系统拍照、相册

    1.调用系统拍照 首先需要申请相机权限 <uses-permission android:name="android.permission.CAMERA" /> pri ...

  3. Android调用系统拍照裁剪和选图功能

    最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照 private fun openCamera() { //调用相机拍照// 创建File对象,用于存储拍照后的图 ...

  4. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  5. Android调用系统相机和相册(更换微信头像)

    最近做了调用系统相机和相册,在其他博客中看到还有对图像进行剪切,大家都知道,我们在玩微信的时候,头像更换是方形图片,接下来我们就对这种情况具体进行描述: 必要的权限: <uses-permiss ...

  6. 安卓调用系统拍照功能:1、启动拍照返回图片,2、启动拍照,图片存储在指定路径下

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓调用系统拍照功能,两种方式获取拍摄的照片. 1.启动系统拍照intent,并直接返回图片数据 2.启动系统拍照intent,拍照后存储在指定的路径 ...

  7. 调用系统相机和相册出现闪退报错No Activity found to handle Intent

    调用系统相机和相册出现闪退报错No Activity found to handle Intent : 在开发安卓项目的时候遇到了一个问题,当手机调用系统相机和相册的时候会出现闪退的现象,根据报错常常 ...

  8. android webview capturepicture,android webView截图的4种方法

    android 在webView里面截图大概有四种方式,具体内容如下 1.获取到DecorView然后将DecorView转换成bitmap然后写入到文件里面. View view = getWind ...

  9. Android多媒体功能开发(4)——调用系统Activity拍照、选择图片、查看图片、裁剪图片

    一.拍照 拍照界面就是调用系统照相机,动作为MediaStore.ACTION_IMAGE_CAPTURE.生成的照片有三种返回方式: 在调用拍照应用的Intent中通过EXTRA_OUTPUT属性设 ...

  10. Android多层嵌套Fragment中调用系统相机拍照以及裁剪的相关问题解决

    多层嵌套Fragment中调用系统相机拍照.裁剪 最近公司项目有频繁使用相机拍照的需求,然后频繁的实际使用过程中遇到很多大大小小的坑,在此记录下. (ps.关于一些拍照后图片旋转.裁剪设置返回数据为t ...

最新文章

  1. 双目测距测深度_TOF还能这么玩?荣耀V20黑科技升级变测距神器
  2. 深入理解 Java G1 垃圾收集器
  3. Qt Creator 代码自动补全设置
  4. unittest模式切换成普通模式
  5. 打印出重复的姓名和重复的次数,并按重复次数排序:
  6. win10存储池_3个光威480G SSD组WIN10存储池,深度测试到底值不值得搞
  7. Neo4j 图创建1 以BiliBili粉丝UP主之间的关系为例
  8. mysql 5.6 生产my.cnf_一个生产可用的mysql参数文件my.cnf
  9. 基于css和jQuery实现轮播图
  10. 连接oracle报错:Invalid connection string format, a valid format is: host:port:sid
  11. php mysql查询出来二叉树的数据_tp框架怎么实现二叉树查询 如图,查询数据库中小明下面的所有人。到底下面多少人,不清楚。 代码如何实现...
  12. Illustrator导入word中的visio图片方法
  13. java课程设计——租房管理系统
  14. php留言板系统制作,php制作留言板讲解
  15. 企业管理培训PPT模板
  16. python 导入自定义的包
  17. 波粒二象性仿真理论(一) Wave Particle Duality Principle
  18. GemCraft Labyrinth:超耐玩的在线flash塔防游戏
  19. Net-Speeder为OpenVZ加速
  20. 游戏引擎除了开发游戏还能做什么?

热门文章

  1. Endnote_X9安装及使用教程
  2. 室内空气流动原理图_空气流动基本原理
  3. 条码打印软件如何批量导入图片和图片名称
  4. JVM 垃圾回收机制主要原理
  5. 一、最简单的爬虫(python3 爬虫小白系列文章)
  6. 基于内容的图像检索系统设计与实现
  7. 华为路由器ip地址和mac地址绑定命令
  8. java通讯录管理系统_java实现通讯录管理系统
  9. 乐观锁实现之CAS算法分析
  10. 利用python、selenium和超级鹰 实现B站自动登录