Android H5交互实现拍照显示

本文详细介绍了在Android应用中如何实现与H5交互进行拍照和从相册选择图片,并适配了Android 7.0及6.0的网络权限。文章包括权限申请、回调处理、与H5交互的接口定义、实际调用相机或相册的代码,以及针对7.0以上版本创建文件夹的权限配置。核心代码展示了如何保存图片并回调给H5进行显示。
摘要由CSDN通过智能技术生成

今天来整理一下android和h5交互实现拍照,相册选图片进行显示,适配了7.0。6.0的网络权限顺便也简单说下。

PackageManager pkgManager = getPackageManager();
// 读写 sd card 权限非常重要, android6.0默认禁止的, 建议初始化之前就弹窗让用户赋予该权限
boolean sdCardWritePermission =
        pkgManager.checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, getPackageName()) == PackageManager.PERMISSION_GRANTED;
// read phone state用于获取 imei 设备信息
boolean phoneSatePermission =
        pkgManager.checkPermission(Manifest.permission.READ_PHONE_STATE, getPackageName()) == PackageManager.PERMISSION_GRANTED;
boolean cameraPermission =
        pkgManager.checkPermission(Manifest.permission.CAMERA, getPackageName()) == PackageManager.PERMISSION_GRANTED;
if (Build.VERSION.SDK_INT >= 23 && !sdCardWritePermission || !phoneSatePermission || !cameraPermission) {
//没有权限,去申请
    requestPermission();
} else {
   //有权限了
}

通过上面的代码,我们可以看到,我写的简单的申请权限,写的不太好,你们可以去找些比较好的来使用,我们这里主要讲的还是与H5交互拍照,申请权限的话就是下面的代码:

private void requestPermission() {
    ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.READ_PHONE_STATE,Manifest.permission.CAMERA},
            REQUEST_PERMISSION);
}

权限申请好了就是申请权限的回调了:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_PERMISSION) {
        if ((grantResults.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED)) {
//这是我推送的代码
            PushManager.getInstance().initialize(this.getApplicationContext(), userPushService);
        } else {
            Logs.e("tag2", "We highly recommend that you need to grant the special permissions before initializing the SDK, otherwise some "
                    + "functions will not work");
            PushManager.getInstance().initialize(this.getApplicationContext(), userPushService);
        }
    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

好了,简单的权限就申请好了,下面就是主要的交互了,(一定要在有读写权限拍照权限的基础上来写):

首先我们和H5商量一个方法来调用:

因为我的项目和H5交互比较多,所以我就将所有的交互写在了一个类中调用。

private Activity act = null;
//调用 照相机
@JavascriptInterface
public void imagePickerWithID(String json) {

    ((MainActivity) act).imagePickerWithID(json);
}

然后在我们需要调用的类中调用一下

private String  photoCallback =null;
//调用照相机传照片
public void  imagePickerWithID(final String json) {
    mHandlerHelper.sendMessage(json, new MPCallBack() {
        @Override
        public void callBack(int what, Object obj) {
            showActionSheet();
            photoCallback = json;
        }
    });
}

然后我们将拍照后或者去相册选了图片后通过callBack来回调给H5去显示一下:

这里需要注意的是,不要按照我的样式写,因为,我封装了代码,你们写的话,就正常和H5进行交互,回传给H5数据就行。核心代码在下面

上面的方法中的showActionSheet就是去调用客户端的相机或者相册了,接下来就是实际代码:

//拍照START
public static final int PHOTOZOOM = 0; // 相册/拍照
public static final int PHOTOTAKE = 1; // 相册/拍照
private String photoSavePath =Environment.getExternalStorageDirectory().getAbsolutePath()
        + "/ClipHeadPho
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值