安卓 相册和拍照 takephoto的使用 踩过的坑

1 glide 版本冲突

解决方法:

在依赖takephoto库时, 注明排除依赖Glide库即可
具体方法如下:
下面这名依赖语义为: 依赖takephoto4.0.3版本, 并排除依赖Glider库; 下面exclude: ….这句中的com.github.bumptech.glide是依赖Glide的语法, 不是随便拼出来的.
换句话说, 如果您需要排除依赖哪个库,就这个地方换成对应库的依赖链接, 不用加版本号和名称.

compile('com.jph.takephoto:takephoto_library:4.0.3') {
    exclude group: 'com.github.bumptech.glide'
}
  • 但是4.0.3之后 操作单独有一个类,这样 还是会报错,只能 把自己gradle种的glide版本 降到 3.6.1 或者 升级 takephoto中的grilde版本

2 glide 3.6.1 的使用

Glide 3.6.1使用心得

[Gilde 4.0.3 使用心得]

 RequestOptions options = new RequestOptions()
                            .centerCrop()
                            .placeholder(R.drawable.default_head_img)
                            .error(R.drawable.default_head_img)
                            .priority(Priority.HIGH);

                    Glide.with(mContext).load(imgURL).apply(options).into(headerHolder.headerImage);

3 使用Glide加载、缓存图片、Gif、解决背景出现浅绿色、GlideModules冲突

使用Glide加载、缓存图片、Gif、解决背景出现浅绿色、GlideModules冲突

其他

解决了 还是glide依赖重复的问题,我依赖的一个第三方里面又依赖了glide,在哪Terminal里面输入 gradlew -q :app(你看的Module名)dependence (命令可能不对,我也记不清了。你自己百度一下看看)可以查看当前的引用,有重复的在具体操作 这是我的操作 compile(‘me.iwf.photopicker:PhotoPicker:0.1.8’) {
exclude group: ‘com.github.bumptech.glide’, module: ‘glide’
}

4 takephoto 的使用

  • 首先设置监听方法
implements TakePhoto.TakeResultListener,InvokeListener
  • 然后初始化
getTakePhoto().onCreate(savedInstanceState);

public TakePhoto getTakePhoto(){
        if (takePhoto==null){
            takePhoto= (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this,this));
        }
        return takePhoto;
    }
  • 设置监听方法
@Override
    protected void onSaveInstanceState(Bundle outState) {
        getTakePhoto().onSaveInstanceState(outState);
        super.onSaveInstanceState(outState);
    }
@Override
    public void takeSuccess(TResult result) {
        L.e("takeSuccess:" + result.getImage().getCompressPath());
        photoPath = result.getImage().getCompressPath();
        //上传图片
        requestUpLoadIamge(compressImgPath(photoPath));
    }
    @Override
    public void takeFail(TResult result,String msg) {
        L.e("takeFail:" + msg);
        promptInformation("拍照或相册失败,请重试");
    }
    @Override
    public void takeCancel() {
        L.e(getResources().getString(R.string.msg_operation_canceled));
    }

    @Override
    public PermissionManager.TPermissionType invoke(InvokeParam invokeParam) {
        PermissionManager.TPermissionType type=PermissionManager.checkPermission(TContextWrap.of(this),invokeParam.getMethod());
        if(PermissionManager.TPermissionType.WAIT.equals(type)){
            this.invokeParam=invokeParam;
        }
        return type;
    }
以下是一个使用Kotlin编写的示例代码,用于允许用户更改其头像。它将打开一个对话框,让用户选择从相机拍照或从相册中选择。选择后,它将更新用户的头像。 ``` private val REQUEST_IMAGE_CAPTURE = 1 private val REQUEST_IMAGE_SELECT = 2 private var mCurrentPhotoPath: String = "" private fun changeAvatar() { val pictureDialog = AlertDialog.Builder(this) pictureDialog.setTitle("选择头像") val pictureDialogItems = arrayOf("从相册选择", "拍照") pictureDialog.setItems(pictureDialogItems ) { _, which -> when (which) { 0 -> choosePhotoFromGallery() 1 -> takePhoto() } } pictureDialog.show() } private fun choosePhotoFromGallery() { val galleryIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) startActivityForResult(galleryIntent, REQUEST_IMAGE_SELECT) } private fun takePhoto() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) if (takePictureIntent.resolveActivity(packageManager) != null) { val photoFile: File? = try { createImageFile() } catch (ex: IOException) { null } photoFile?.also { val photoURI: Uri = FileProvider.getUriForFile( this, "com.example.android.fileprovider", it ) takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI) startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } } } @Throws(IOException::class) private fun createImageFile(): File { // Create an image file name val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date()) val storageDir: File = getExternalFilesDir(Environment.DIRECTORY_PICTURES)!! return File.createTempFile( "JPEG_${timeStamp}_", /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ).apply { // Save a file: path for use with ACTION_VIEW intents mCurrentPhotoPath = absolutePath } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { when (requestCode) { REQUEST_IMAGE_CAPTURE -> { val file = File(mCurrentPhotoPath) val uri = Uri.fromFile(file) updateAvatar(uri) } REQUEST_IMAGE_SELECT -> { val uri = data?.data updateAvatar(uri) } } } } private fun updateAvatar(uri: Uri?) { // Do something with the selected image } ``` 请注意,在使用相机拍照时,我们需要在`AndroidManifest.xml`文件中添加以下内容,以确保我们的应用程序具有访问相机的权限: ``` <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> ``` 同时,我们还需要添加以下内容,以确保我们的应用程序具有访问存储的权限: ``` <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值