调用系统Acitivity获取数据代理

来源:互联网 发布:贵州卫计委网络直报 编辑:程序博客网 时间:2024/06/05 11:08
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