美文网首页
Android Camera

Android Camera

作者: cxm11 | 来源:发表于2016-04-10 00:44 被阅读353次

    Android Camera Api的心得
    Android从Camera中获取图片的两种方法


    通过以下两种方式,可以在应用程序中使用摄像机

    1. 使用现有应用程序中Android摄像头应用程序
    2. 直接使用应用程序提供的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

    比较常用的应用场景:

    1. 上传头像

    点击头像后,弹出选择对话框,选择相册或者拍照,完成后湖出现剪裁界面,裁剪完成后,会将头像显示在界面上,如果有服务的话,会将头像上传到服务器。

    1. 登录过程

    在很多应用程序的模块中,都有“我的”这个模块,在未登录状态下点击其中的某一项,就会弹出登录界面,登录完成后回到我的界面,会显示一些登录后的数据

    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

    相关文章

      网友评论

          本文标题:Android Camera

          本文链接:https://www.haomeiwen.com/subject/qkqblttx.html