调用相机拍照

原文链接:

【游戏蛮牛】Unity3D调用Android功能与组件(二)——调用相机拍照

发表于 2016-10-23 15:40:07 最后于2017-2-15 15:51 编辑


前言


在上一篇中,我们介绍了使用JavaClass和AndroidJavaobject来实现仅用C#就实现Unity3D对Toast的调用。这一篇我们主要讲一下如何调用Android摄像功能,当然网上有很多调用摄像头的例子,我们主要想不混用Android工程,用纯C#来实现。

如果您有任何疑问或者需求,请加Q群425377188交流。


1.先上代码

privatevoidtakePhoto(objectphotoname){

#if UNITY_ANDROID

//Init AndroidJavaClass

AndroidJavaClass UnityPlayer =newAndroidJavaClass("com.unity3d.player.UnityPlayer");;

AndroidJavaClass Intent =newAndroidJavaClass ("android.content.Intent");

AndroidJavaClass MediaStore=newAndroidJavaClass("android.provider.MediaStore");

AndroidJavaClass Uri =newAndroidJavaClass ("android.net.Uri");

AndroidJavaClass Environment =newAndroidJavaClass ("android.os.Environment");

//获取当前Activity

AndroidJavaObject currentActivity= UnityPlayer.GetStatic("currentActivity");

//相当于Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

AndroidJavaObject intent=newAndroidJavaObject("android.content.Intent",MediaStore.GetStatic("ACTION_IMAGE_CAPTURE"));

//获取sd卡路径,相当于String sdPath= Environment.getExternalStorageDirectory().getAbsolutePath();

AndroidJavaObject sdPath=newAndroidJavaObject("java.lang.String",Environment.CallStatic("getExternalStorageDirectory").Call("getAbsolutePath"));

//将路径转化为java String

AndroidJavaObject img_path=newAndroidJavaObject("java.lang.String","/Android/data/"+Application.bundleIdentifier+"/files/"+photoname.ToString()+".jpg");

//相当于img_path=sdPath+img_path;

img_path=sdPath.Call("concat",img_path);

//相当于File targetImgFile=new File(img_path);

AndroidJavaObject targetImgFile=newAndroidJavaObject("java.io.File",img_path);

//相当于intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(targetImgFile));

intent.Call ("putExtra",MediaStore.GetStatic("EXTRA_OUTPUT"),Uri.CallStatic("fromFile",targetImgFile));

currentActivity.Call ("startActivity",intent);

#endif

}

2、解释说明

(1)、使用该方法拍完照后自动保存到sd卡下的/Android/data/应用签名/photoName.jpg,其中photoName为调用该方法的String类型传入参数,应用签名一般为com.company.product

(2)、上面的注释应该很清楚了,学过Android开发的应该都能看懂这些代码,看不懂的直接用就行。

(3)、跟用混合开发调用摄像头的区别:该方法暂时不能使用startActivityForResult()方法进行回调。如果需要请参考http://www.manew.com/thread-101810-1-1.html。

由于游戏蛮牛对于版权保护不给力,经常出现自己辛苦发的文章被非法转载到其他论坛(不注明原文作者和链接),后续MemoryC将转战 。游戏蛮牛上仍然会发,但以后可能会以转载或图片形式出现。请各位码友们支持原版,转载请务必注明原文链接。写篇博客不容易,本身就是免费的福利,非法转载更让人心寒。

你可能感兴趣的:(调用相机拍照)