Android Camera
Android Camera Api的心得
Android从Camera中获取图片的两种方法
- 使用现有应用程序中Android摄像头应用程序
- 直接使用应用程序提供的Android摄像头APP
使用现有应用程序的Android摄像头应用程序
使用MediaStore.ACTION_IMAGE_CAPTURE启动安装在手机上的摄像头应用程序。它的语法下面给出:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
除了以上,也可以通过MediaStore提供其它可用的意图。它们列出如下
ACTION_IMAGE_CAPTURE_SECURE它返回照相机拍摄到的图像,设备被固定
ACTION_VIDEO_CAPTURE它调用已有的视频应用程序在Android中捕获视频
EXTRA_SCREEN_ORIENTATION它是用来在屏幕的方向设置:垂直或横向
EXTRA_FULL_SCREEN它被用来控制ViewImage的用户接口
INTENT_ACTION_VIDEO_CAMERA这个意图是用来启动摄像机在视频模式
EXTRA_SIZE_LIMIT它用于指定的视频或图像捕获尺寸大小限制
现在使用startActivityForResult()函数推出活动,并等待它的结果。它的语法下面给出:
startActivityForResult(intent,0)
返回结果,其结果可以通过覆盖onActivityResult方法获得
startActivity(Intent intent, Int requestCode)中的requestCode用于回收Bundle时的识别。
相关函数:
startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)
eg:
MainActivity
//在onCreate中添加btn的onClick
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,0);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
Bitmap bp = (Bitmap)data.getExtras().get("data");
imgFavorite.setImageBitmap(bp);
}
补充:startActivityForResult
- 上传头像
点击头像后,弹出选择对话框,选择相册或者拍照,完成后湖出现剪裁界面,裁剪完成后,会将头像显示在界面上,如果有服务的话,会将头像上传到服务器。
- 登录过程
在很多应用程序的模块中,都有“我的”这个模块,在未登录状态下点击其中的某一项,就会弹出登录界面,登录完成后回到我的界面,会显示一些登录后的数据
startActivityForResult(intent, requestcode),该方法两个参数一个是带数据的Intent,另一个就是请求码,这个请求码是用于给activity识别是哪个activity返回的数据,因为在一个activity中可能会出现多个startActivityForResult.
onActivityResult(int requestCode, int resultCode, Intent data)该方法在startActivityForResult启动的activity结束后返回数据时调用,其中第二个参数是结果码,结果码为RESULT_OK时,说明activity顺利结束并返回结果。
第一个参数requestcode就是被启动的activity的识别码,在startActivityForResult方法时传入。
第三个参数data是Intent型的数据,该数据就是从activity返回回来的数据,可以使用data.getExtras()方法得到bundle,然后从bundle中取出一些基本数据。
activity要能成功返回数据,就必须在结束finish()之前调用setResult()方法,该方法的两个参数,第一个为结果码,也就是onActivityResult方法中的第二个参数resultcode,一般情况下我们都设置该值为RESULT_OK。
在B中回传数据时采用setResult方法,并且之后要调用finish方法。
setResult(RESULT_OK, intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的
Bundlefinish();//此处一定要调用finish()方法
按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了
@Override
public void onBackPressed() {
Log.i(TAG, "onBackPressed");
setResult(Const.LIVE_OK);
super.onBackPressed();
}
直接使用应用程序提供的Android摄像头API
startActivityForResult和setResult详解
Android基础之——startActivityForResult启动界面并返回数据,上传头像
http://blog.csdn.net/csr_yang/article/details/31034291?utm_source=tuicool&utm_medium=referral