|
2 | 2 |
|
3 | 3 | import android.Manifest;
|
4 | 4 | import android.content.DialogInterface;
|
| 5 | +import android.content.Intent; |
| 6 | +import android.net.Uri; |
5 | 7 | import android.support.annotation.NonNull;
|
6 | 8 | import android.support.v7.app.AlertDialog;
|
7 | 9 | import android.widget.Toast;
|
8 | 10 |
|
| 11 | +import com.lwp.xiaoyun_core.ui.camera.CameraImageBean; |
| 12 | +import com.lwp.xiaoyun_core.ui.camera.RequestCodes; |
9 | 13 | import com.lwp.xiaoyun_core.ui.camera.XiaoYunCamera;
|
| 14 | +import com.lwp.xiaoyun_core.util.callback.CallbackManager; |
| 15 | +import com.lwp.xiaoyun_core.util.callback.CallbackType; |
| 16 | +import com.lwp.xiaoyun_core.util.callback.IGlobalCallback; |
| 17 | +import com.yalantis.ucrop.UCrop; |
10 | 18 |
|
11 | 19 | import permissions.dispatcher.NeedsPermission;
|
12 | 20 | import permissions.dispatcher.OnNeverAskAgain;
|
@@ -41,7 +49,9 @@ void startCamera() {
|
41 | 49 | XiaoYunCamera.start(this);
|
42 | 50 | }
|
43 | 51 |
|
44 |
| - //开始请求权限 |
| 52 | + //开始请求权限, |
| 53 | + //在进行 需要权限的操作时!!! 调用; |
| 54 | + // 如项目中 点击个人具体信息页的头像时! |
45 | 55 | public void startCameraWithCheck() {
|
46 | 56 | //开始请求权限(相机、读写)
|
47 | 57 | PermissionCheckerDelegatePermissionsDispatcher.startCameraWithPermissionCheck(this);
|
@@ -93,4 +103,61 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
|
93 | 103 | //PermissionCheckerDelegatePermissionsDispatcher 是注解自动生成的!!
|
94 | 104 | PermissionCheckerDelegatePermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
|
95 | 105 | }
|
| 106 | + |
| 107 | + // 本方法是对应 startActivityForResult()的回调 |
| 108 | + // 前两个case 与 CameraHandler中的 DELEGATE.startActivityForResult() 相对应 |
| 109 | + // . |
| 110 | + // 后两个case 与 前两个case中的 UCrop.start()相对应, |
| 111 | + // 实际上 UCrop.start()源码中,封装了startActivityForResult() |
| 112 | + @Override |
| 113 | + public void onActivityResult(int requestCode, int resultCode, Intent data) { |
| 114 | + super.onActivityResult(requestCode, resultCode, data); |
| 115 | + |
| 116 | + if (resultCode == RESULT_OK) { |
| 117 | + |
| 118 | + switch (requestCode) { |
| 119 | + case RequestCodes.TAKE_PHOTO: |
| 120 | + //获取到 存储照片的 临时文件路径 |
| 121 | + final Uri resultUri = CameraImageBean.getInstance().getPath(); |
| 122 | + UCrop.of(resultUri, resultUri)//一参为 欲剪裁图片的路径,二参为 放置剪切完图片的路径 |
| 123 | + .withMaxResultSize(400, 400) |
| 124 | + .start(getContext(), this);//start()用意看源码 |
| 125 | + break; |
| 126 | + |
| 127 | + case RequestCodes.PICK_PHOTO: |
| 128 | + |
| 129 | + if (data != null) { |
| 130 | + final Uri pickPath = data.getData();//拿到用户选择的图片的路径 |
| 131 | + |
| 132 | + //从相册选择后 需要有个路径 来存放 剪裁过的图片 |
| 133 | + final String pickCropPath = XiaoYunCamera.createCropFile().getPath(); |
| 134 | + |
| 135 | + UCrop.of(pickPath, Uri.parse(pickCropPath)) |
| 136 | + .withMaxResultSize(400, 400) |
| 137 | + .start(getContext(), this); |
| 138 | + } |
| 139 | + break; |
| 140 | + |
| 141 | + case RequestCodes.CROP_PHOTO: |
| 142 | + |
| 143 | + final Uri cropUri = UCrop.getOutput(data); |
| 144 | + |
| 145 | + //拿到剪裁后的数据进行处理 |
| 146 | + @SuppressWarnings("unchecked") |
| 147 | + final IGlobalCallback<Uri> callback = CallbackManager |
| 148 | + .getInstance() |
| 149 | + .getCallback(CallbackType.ON_CROP);//拿到回调接口 |
| 150 | + if (callback != null) { |
| 151 | + callback.executeCallback(cropUri);//执行回调接口方法 |
| 152 | + } |
| 153 | + break; |
| 154 | + |
| 155 | + case RequestCodes.CROP_ERROR: |
| 156 | + Toast.makeText(getContext(), "剪裁出错", Toast.LENGTH_SHORT).show(); |
| 157 | + break; |
| 158 | + default: |
| 159 | + break; |
| 160 | + } |
| 161 | + } |
| 162 | + } |
96 | 163 | }
|
0 commit comments