打开android 系统的相机,拍照并且图片返回

转载:http://www.jianshu.com/p/7052add136f2

     之前一直不了解相机这里,也尝试写过但总是出错,这篇文章讲的很明白,特此记录,

    主要介绍了打开相机进行拍照之后,获取拍照后的照片

    问题1.调用系统相机拍照,并且把图片返回流程是什么?

    答:1.定义一个Uri用来标记相机拍摄的照片

         2.通过系统的action打开系统相机,同时传递Uri 

         3.拍照之后点击确定回调 onActivityResult()方法,在该方法中 获取拍照返回的Uri 

     注意 :有的手机的Uri此时传递回 onActivityResult 时,通过 data.getDatd( )时,为空,

                 这时可以用一个变量引用之前的Uri就好了;在返回的data中的是一个压缩过的Bitmap,

                 而且压缩的比较厉害,所以根本不会产生OOM异常作者试过之后,确实是一个清晰度

                相当低的一张图片,根本不能满足需求,所以需要返回原图,当然这个原图是需要处理

                的,否则依然会出现OOM

   问题2 .图片保存路径,总是分不清楚,图片存在哪里,返回Uri的话,图片Uri可以转化为图片的路径string

                  path: 系统相册的路径  

String path=Environment.getExternalStorageDirectory( )+File.separator+

   Environmen.DIRECTORY_DCIM+ File.separator; 

                   即path : /storage/emulated/0/DCIM/

存储图片(文件)的 名字 ,按照时间来命名:

                 private   String  getPhoneFileName(){

Date  date =new Date(System.currentTimeMillis( ));

    SimpleDateFormat   dateFormat=new SimpleDateFormat("yyyyMMdd_HHmmss");

return "IMG_"+dateFormat.format(date);

}

图片存储的地址 = path+文件名+“.jpg”


问题3.涉及的权限

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.CAMERA"/>

下面是具体的步骤:

正常调用相机,在

          Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          startActivityForResult(intent, REQUEST_CODE);

然后重写onActivityResult

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
        }
    }

上面是整体的框架,下面是具体的代码:

 
 
String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { File file = new File(path); if (!file.exists()) { file.mkdir(); } String fileName = getPhotoFileName() + ".jpg"; //图片的文件名 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoUri = Uri.fromFile(new File(path + fileName));//记录图片的uri intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); //photoUri就是图片存储的位置 startActivityForResult(intent, REQUEST_CODE); }
关于 图片返回部分 ,如下

 
 
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_CODE) { Log.d(TAG, "开始回调"); Uri uri = null; if (data != null && data.getData() != null) { uri = data.getData(); } if (uri == null) { //如果是空的,使用记录的Uri if (photoUri != null) { uri = photoUri; } } }

 打开相机 ,拍照 ,完成 ,返回的图片,如图:


   


介绍到这里

  


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中,我们可以使用Android原生功能来打开图片拍照。要实现这些功能,我们可以使用Android的Intent来启动系统图片选择器或相机应用。 首先,要打开图片,我们需要使用Intent来启动图片选择器应用。我们可以使用如下代码: ```csharp AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent", intentClass.GetStatic<string>("ACTION_PICK")); intentObject.Call<AndroidJavaObject>("setType", "image/*"); intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_ALLOW_MULTIPLE"), true); AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); unityActivity.Call("startActivityForResult", intentObject, PICK_IMAGE_REQUEST); ``` 而要拍照,我们可以使用如下代码: ```csharp AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent", intentClass.GetStatic<string>("MediaStore.ACTION_IMAGE_CAPTURE")); AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); unityActivity.Call("startActivityForResult", intentObject, TAKE_PHOTO_REQUEST); ``` 在以上代码中,我们使用AndroidJavaClass和AndroidJavaObject来创建一个新的Intent对象,然后启动系统图片选择器或相机应用。最后,我们需要在Unity中的```OnActivityResult```方法中处理返回的结果,来获取选择的图片或拍摄的照片。 需要注意的是,我们需要在AndroidManifest.xml文件中添加相应的权限声明,例如读取外部存储的权限和相机权限,以确保应用能够正常打开图片拍照

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值