调用系统Acitivity获取数据代理

26 篇文章 32 订阅
public abstract class StartActivityForResultDelegate {

    private Activity mCurrentActivity;
    private int mReqCode;

    public StartActivityForResultDelegate(Activity currentActivity, int reqCode){
        mCurrentActivity = currentActivity;
        mReqCode = reqCode;
    }

    protected abstract  Intent initIntent();

    public void startActivityForResult(){
        mCurrentActivity.startActivityForResult(initIntent(), mReqCode);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data){
        if (requestCode == mReqCode){
            if (resultCode == Activity.RESULT_OK){
                onResultOk(data);
            }
        }
    }

    protected void onResultOk(Intent data){

    }
}


public class PhotoTakeDelegate extends StartActivityForResultDelegate{

    public static interface Callback{
        void onTook(Uri uri);
    }

    private Uri  mOutFileUri;
    private Callback mCallback;

    public PhotoTakeDelegate(Activity currentActivity, int reqCode){

        super(currentActivity, reqCode);
        mOutFileUri = getOutputImageFileUri("photo_take_" + System.currentTimeMillis() + ".jpg");

    }

    public PhotoTakeDelegate(Activity currentActivity, int reqCode, Uri outFileUri){
        this(currentActivity, reqCode);
    }

    public PhotoTakeDelegate(Activity currentActivity, int reqCode, String fileName){

        this(currentActivity, reqCode);
        mOutFileUri = getOutputImageFileUri(fileName);

    }

    public void setCallback(Callback callback){
        mCallback = callback;
    }

    @Override
    protected Intent initIntent() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutFileUri);
        return intent;
    }


    @Override
    protected void onResultOk(Intent data) {

        onTook(mOutFileUri);

        if (mCallback != null){
            mCallback.onTook(mOutFileUri);
            LogUtils.i("photo take callback . uri = " + mOutFileUri.toString() );
        }
    }

    protected void onTook(Uri uri){

    }

    private  Uri getOutputImageFileUri(String fileName){

        File mediaStorageDir =
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

        File imageFile = new File(mediaStorageDir.getPath() + File.separator
                +  fileName);


        return Uri.fromFile(imageFile);
    }
}


public class ImageCropDelegate extends StartActivityForResultDelegate {

    public static interface  Callback{
        void onCrop(Bitmap bm);
    }

    private Uri mUri;
    private Callback mCallback;

    public ImageCropDelegate(Activity activity, int reqCode, Uri uri){
        this(activity, reqCode);
        mUri = uri;
    }

    public ImageCropDelegate(Activity activity, int reqCode){
        super(activity, reqCode);
    }

    public void setCallback(Callback callback){
        mCallback = callback;
    }

    public void setUri(Uri uri){
        mUri = uri;
    }

    @Override
    protected Intent initIntent() {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(mUri, "image/*");
//        intent.setType("image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 0.3);// 裁剪框比例
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 150);// 输出图片大小
        intent.putExtra("outputY", 150);
        intent.putExtra("return-data", true);
        return intent;
    }


    @Override
    protected void onResultOk(Intent data) {
        if (data != null){
            Bitmap bitmap = data.getParcelableExtra("data");

            onCrop(bitmap);
            if (mCallback != null){
                mCallback.onCrop(bitmap);
                LogUtils.i("image crop callback . bitmap = null :  " + (bitmap == null));
            }
        }
    }

    protected void onCrop(Bitmap bm){

    }
}



public class ImageSelectDelegate extends StartActivityForResultDelegate {

    public static interface Callback{
        void onImageSelected(Uri uri);
    }

    private Callback mCallback;

    public ImageSelectDelegate(Activity activity , int reqCode){
        super(activity, reqCode);
    }

    public void setCallback(Callback callback){
        mCallback = callback;
    }

    @Override
    protected Intent initIntent() {
        Intent selectIntent =
                new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        return selectIntent;
    }

    @Override
    protected void onResultOk(Intent data) {
        if(data != null) {
            Uri image = data.getData();
            onImageSelected(image);

            if (mCallback != null){
                mCallback.onImageSelected(image);
                LogUtils.i("image select callback . uri = " + image.toString());
            }
        }
    }

    protected void onImageSelected(Uri uri){

    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值