package com.llf.photopicker; import android.Manifest; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.llf.basemodel.base.BaseActivity; import com.llf.basemodel.utils.FileUtil; import com.llf.basemodel.utils.LogUtil; import java.io.File; /** * Created by llf on 2017/3/10 */ public class PickPhotoActivity extends BaseActivity implements View.OnClickListener, Callback { public static void startActivity(Activity activity, ImgSelConfig config, int RequestCode) { Intent intent = new Intent(activity, PickPhotoActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("config", config); intent.putExtras(bundle); activity.startActivityForResult(intent, RequestCode); } public static void startActivity(Fragment fragment, ImgSelConfig config, int RequestCode) { Intent intent = new Intent(fragment.getActivity(), PickPhotoActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("config", config); intent.putExtras(bundle); fragment.startActivityForResult(intent, RequestCode); } public static final String INTENT_RESULT = "result"; private static final int IMAGE_CROP_CODE = 1; private static final int CAMERA_REQUEST_CODE = 2; private ImgSelConfig config; private ImageView back; private TextView tvRight; private String cropImagePath;//存储裁剪图片的位置 @Override protected int getLayoutId() { return R.layout.activity_pick_photo; } @Override protected void initView() { Constant.imageList.clear(); config = (ImgSelConfig) getIntent().getSerializableExtra("config"); back = (ImageView) findViewById(R.id.img_back); tvRight = (TextView) findViewById(R.id.tv_right); back.setOnClickListener(this); tvRight.setOnClickListener(this); /** * 6.0系统动态权限申请需要 */ if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { AlertDialog.Builder build = new AlertDialog.Builder(PickPhotoActivity.this); build.setTitle("权限申请"); build.setMessage("权限将影响app的运行"); build.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); build.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); build.show(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE); } } else { getSupportFragmentManager().beginTransaction() .add(R.id.content, PickPhotoFragment.instance(config), null) .commitAllowingStateLoss(); } } @Override public void finish() { super.finish(); overridePendingTransition(0, R.anim.push_down_out); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == IMAGE_CROP_CODE && resultCode == RESULT_OK) { Constant.imageList.add(cropImagePath); exit(); } super.onActivityResult(requestCode, resultCode, data); } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.img_back) { finish(); } else if (id == R.id.tv_right) { exit(); } } private void exit() { Intent intent = new Intent(); intent.putStringArrayListExtra(INTENT_RESULT, Constant.imageList); setResult(RESULT_OK, intent); finish(); } private void crop(String imagePath) { File file = new File(FileUtil.createRootPath(this) + "/" + System.currentTimeMillis() + ".jpg"); cropImagePath = file.getAbsolutePath(); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(Uri.fromFile(new File(imagePath)), "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", config.aspectX); intent.putExtra("aspectY", config.aspectY); intent.putExtra("outputX", config.outputX); intent.putExtra("outputY", config.outputY); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); startActivityForResult(intent, IMAGE_CROP_CODE); } @Override public void onSingleImageSelected(String path) { LogUtil.e(path); if (config.needCrop) { crop(path); } else { Constant.imageList.add(path); exit(); } } @Override public void onImageSelected(String path) { tvRight.setText("确定(" + Constant.imageList.size() + "/" + config.maxNum + ")"); } @Override public void onImageUnselected(String path) { tvRight.setText("确定(" + Constant.imageList.size() + "/" + config.maxNum + ")"); } @Override public void onCameraShot(File imageFile) { if (imageFile != null) { if (config.needCrop) { crop(imageFile.getAbsolutePath()); } else { Constant.imageList.add(imageFile.getAbsolutePath()); exit(); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case CAMERA_REQUEST_CODE: if (grantResults.length >= 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { getSupportFragmentManager().beginTransaction() .add(R.id.content, PickPhotoFragment.instance(config), null) .commitAllowingStateLoss(); } else { finish(); } break; default: break; } } }