Android中Intent习惯用法

2019-12-10 19:42:07于丽

示例代码如下:

//表示用于拍照的requestCode
 private final int REQUEST_CODE_IMAGE_CAPTURE = 1;
 //我们存储照片的输出路径,以便后续使用
 private Uri imageOutputUri = null;

 //拍照
 private void captureImage(){
 PackageManager pm = getPackageManager();

 //先判断本机是否在硬件上有摄像能力
 if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)){
 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 ComponentName componentName = intent.resolveActivity(pm);
 //判断手机上有无摄像机应用
 if(componentName != null){
 //创建图片文件,以便于通过Uri.fromFile()生成对应的Uri
 File imageFile = createImageFile();
 if(imageFile != null){
  //根据imageFile生成对应的Uri
  imageOutputUri = Uri.fromFile(imageFile);
  //利用该Uri作为拍照完成后照片的存储路径,注意,一旦设置了存储路径,我们就不能获取缩略图了
  intent.putExtra(MediaStore.EXTRA_OUTPUT, imageOutputUri);
  //调用startActivityForResult()方法,以便在onActivityResult()方法中进行相应处理
  startActivityForResult(intent, REQUEST_CODE_IMAGE_CAPTURE);
 }else{
  Toast.makeText(this, "无法创建图像文件!", Toast.LENGTH_LONG).show();
 }
 }else{
 Toast.makeText(this, "未在本机找到Camera应用,无法拍照!", Toast.LENGTH_LONG).show();
 }
 }else{
 Toast.makeText(this, "本机没有摄像头,无法拍照!", Toast.LENGTH_LONG).show();
 }
 }

 //创建图片文件,以便于通过Uri.fromFile()生成对应的Uri
 private File createImageFile(){
 File image = null;

 //用时间戳拼接文件名称,防止文件重名
 String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
 String imageFileName = "JPEG_" + timeStamp + "_";
 File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

 try{
 image = File.createTempFile(
  imageFileName, //前缀
  ".jpg", //后缀
  storageDir //文件夹
 );
 }catch (IOException e){
 image = null;
 e.printStackTrace();
 Log.e("DemoLog", e.getMessage());
 }

 return image;
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
 //首先判断是否正确完成
 if(resultCode == RESULT_OK){
 switch (requestCode){
 case REQUEST_CODE_IMAGE_CAPTURE:
  //此处,我们可以通过imageOutputUri获取到我们想要的图片
  String imagePath = imageOutputUri.toString();
  Log.i("DemoLog", "照片路径是: " + imagePath);
  Toast.makeText(this, "照片路径是: " + imagePath, Toast.LENGTH_LONG).show();

  //以下代码尝试获取缩略图
  //如果设置MediaStore.EXTRA_OUTPUT作为extra的时候,那么此处的intent为null,需要判断
  if(intent != null){
  Bitmap thumbnail = intent.getParcelableExtra("data");
  //有的手机并不会给拍照的图片生成缩略图,所以此处也要判断
  if(thumbnail != null){
  Log.i("DemoLog", "得到缩略图");
  }
  }
 default:
  break;
 }
 }
 }