android studio怎么样获取摄像头

1238人阅读
android(56)
AR/VR(17)
1.在camera视图中显示其它控件,在增强现实中有很重要的应用,下面介绍一种在camera视图中加载其它控件的方法。
2.下面先来展示下要达到的效果,如下图中所示
3.首先要是在一般的容器来,像linearlayout,relativeLayout,tableLayout,FrameLayout等可以在代码中动态布局,但在摄像头视图下,本人用的是textureView怎么都不可以添加相关的控件,比如加个editText或是button等,特别是上图想要的效果,基本达不到。
4.首先出现上图所示的关键不是代码而是布局文件,产生上面视图和布局文件如下所示
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
android:id="@+id/mainView"
android:layout_width="match_parent"
android:layout_height="match_parent"&
android:id="@+id/texture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="dragon test"
android:textColor="@android:color/holo_green_light"
android:textSize="25sp"
android:visibility="visible" /&
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView"
android:text="pls input some thing"
android:layout_centerHorizontal="true"
android:textSize="25sp"
android:visibility="visible"
android:textColor="#b00505"
android:layout_gravity="right"/&
android:id="@+id/btn1"
android:text="导航"
android:layout_gravity="bottom|center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/&
5.大家可能发现这个布局文件和其它的布局文件不一样,是的你发现了新大陆,& merge/&标签,这个标签不像android其它六大类标签,它主要是在UI的结构优化中起非常重要的作用,它可以删除多余的层级,优化UI,使用如上面所示,注意这个视图是一层层渲染的,所以要注意先后顺序。
6.使用上面的文件注意两点。
1.& merge /&只可以作为xml layout的根节点。
2.当需要扩充的xml layout本身是由merge作为根节点的话,需要将被导入的xml layout置于 viewGroup中,同时需要设置attachToRoot为True。
7.除了& merge/&外,下面再补充两种其它两种关于UI优化的知识点,android抽象布局中的include,ViewStub,他们和merge一样,是官方提供的三种布局。
8.布局重用& include /&,它主要是能重用布局文件,下面举个简单的例子
xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:background="@color/app_bg"
android:gravity="center_horizontal"&
layout="@layout/titlebar"/&
android:layout_width=”match_parent”
android:layout_height="wrap_content"
android:text="@string/hello"
android:padding="10dp" /&
& include /&标签可以使用单独的layout属性。
& include /&标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖,解决办法如下。
View bookmarks_container_2 = findViewById(R.id.bookmarks_favourite)
bookmarks_container_2.findViewById(R.id.bookmarks_list)
3 . 在include标签中所有的android:layout_*都是有效的,前提是必须要写layout_width和layout_height两个属性。
merge和include的复用:
merge标签用来消除我们在include一个布局到另一个布局时所产生的冗余view group。比如现在很多布局中会有两个连续的Button,于是我们将这两个连续的Button做成可复用布局(re-usable layout)。在使用include标签时我们必须先将这两个Button用一个view group比如LinearLayout组织在一起然后供其它布局使用,如果是include的地方也是LiearLayout就会造成有两层连续的LiearLayout,除了降低UI性能没有任何好处。这个时候我们就可以使用& merge/&标签作为可复用布局的root view来避免这个问题,具体如下,当我们用& include/&标签复用上述代码时,系统会忽略merge元素,直接将两个连续的Button放在& include/&标签所在处。。
xmlns:android="/apk/res/android"&
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/add"/&
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/delete"/&
9.& ViewStub /&:标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局像进度条、显示错误消息等可以使用& ViewStub /&标签,以减少内存使用量,加快渲染速度。& ViewStub /&是一个不可见的,大小为0的View。& ViewStub /&标签使用如下:
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/progress_overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" /&
加载方法如下所示
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE)
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate()
ViewStub目前还不支持 & merge /& 标签
10.对AR/VR研究有兴趣的可以加入下面Q群或是关注下面所示的公众号。
reference:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:294498次
积分:4317
积分:4317
排名:第7358名
原创:131篇
转载:25篇
评论:88条
(1)(2)(1)(1)(2)(5)(4)(16)(26)(12)(18)(11)(11)(4)(13)(4)(13)(1)(3)(8)(1)
阅读:15550
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'查看: 132741|回复: 427
终于搞定android驱动USB摄像头了!
该用户从未签到主题帖子e币
多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题。
帖子大意:
讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼容)
默认Android不提供访问外部摄像头的API,所以你要考虑写一个内核到Android应用层通信的中间件。
当你给设备接入了USB摄像头,首先要检查一下几点:
1)你的设备是否支持USB-OTG?
2)是否在/dev目录创建了设备?如果创建了就那么一切就很简单了。shell 执行 ls -l /dev/v*,你将会看到video0或者video1。
3)如果/dev没有创建设备,你需要写一个固件(UVC)跟硬件通信!
(帖子地址: ... android-application)
读到这里,再次给我的MK802接上USB摄像头,然后打开adb shell,执行ls -l /dev/v*,看到了 /dev/video0设备!
拔掉摄像头,再执行,video0消失,再连接,video0出现,这说明mk802支持我的摄像头!
到此,已经明确,下一步我需要写一个android应用层到内核通信的中间件,我对这个也不了解,于是在google狂搜“android usb camera”
终于功夫不负有心,找到了一个android usb摄像头的应用例子
从中找了一个SimpleWebCamra.apk,下载了赶紧装上,发现不能运行,logcat报一个错,提示没有权限访问video0设备。
这是为什么?我的系统已经root了呀!难道我的apk也要获得root权限?又在网上查资料,试了半天,还是不行。
后来忽然灵机一动,android也是linux呀,我能不能把video0设备设置成没权限?问了问朋友,执行了一个命令:
chmod 777 /dev/video0
再次运行apk终于跑起来了!(后来经测试,设置成 chmod 0666 /dev/vidoe0 也可以,但是我也不懂0666的含义。。)
但是问题又来了,程序进去以后,报错
VIDIOC_DQBUF error 22, Invalid argument
于是想,必须要活的SimpleWebCamea的源码了!经过苦苦搜索,很幸运的找到一个simplewebcam的源码:
下载一看,里边包含ndk的c源码和android源码,于是按照ndk教程,安装了cygwin
苦于c代码看不太懂,错误提示VIDIOC_DQBUF 调用参数错误,却无从下手。
于是看了n篇教程,偶然发现说打开摄像头设备的open方法的一些参数,然后试着把c代码中的一些参数去掉:
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
fd = open (dev_name, O_RDWR);
再次build,运行,天啊终于出来了,高兴死了!
下边附上项目的源码:
本帖子中包含更多资源
才可以下载或查看,没有帐号?
求apk文件啊&
学习一下。。。&
非常精彩,感谢支持,加油!
本帖被以下淘专辑推荐:
& |主题: 5, 订阅: 0
该用户从未签到主题帖子e币
搞定录像,,,哈哈哈
新手,求发一份啊。万分感激!&
给个录像的代码参考参考吧!&
大神,能不能发一份安卓驱动USB摄像头,录像的源码啊,搞了好久都不识别,求带。。。&
能发份源码参考一下吗?&
该用户从未签到主题帖子e币
看了这个日志,我也搞了usbcamera摄像头试了下,640 x 480分辨率可以出来正常图像,后来修改成1600 x 1200&&...
兄弟,能分享一下吗,我的平板是带USB口的,鼠标这些接上去都可以用,摄像头接上去的时候,只能切换平板的前后摄像头, 换不到USB摄像头上, 查了下硬件,当USB摄像头接上去的时候,也能发现摄像头硬件代码,
但安桌的系统, 不调用那个USB 2.0 UVC Camera
求帮助,万分感谢.
解决了么?求步骤。万分感谢&
该用户从未签到主题帖子e币
1、如何知道设备支持usb-otg
2、我的设备是有前置和后置摄像头的,查看/dev下有vedio0和vedio1,插上摄像头后依然是vedio0和vedio1,没有增加也没有减少,是否这样就是说明我的usb摄像头没有识别
3、如何判断/dev没有创建设备
usb-otg可以看看手机官方说明,或者在网上搜搜手机型号看看是不是支持otg。
usb摄像头首先得是免驱的,可以先到linux电脑上试试了,如果接到linux电脑上能发现设备,说明支持,android应该就没问题
dev下有了对应的v&
该用户从未签到主题帖子e币
ifusion 发表于
版主你这个例子做拍照和保存视频了吗?
没有,视频代码也是用的是别人的
我能将MediaRecorder的视频源指定到你的这个代码内的视频源上吗?&
我现在使用这个应用实现了拍照,录像就费劲了,不知道怎么弄了,O(∩_∩)O~&
该用户从未签到主题帖子e币
本帖最后由 doumingliang 于
17:19 编辑
我已经搞定啦 select timeout 也就是黑屏&&.
该用户从未签到主题帖子e币
select timeout 最终原因已经找到,USB供电不足,当发生此问题可以测试USB电压,若USB电压低于4.6v即可判定供电问题。
usb供电不足,怎么处理?
能代码里解决吗?
还是需要改硬件?&
签到天数: 2 天连续签到: 1 天[LV.1]初来乍到主题帖子e币
签到天数: 29 天连续签到: 2 天[LV.4]偶尔看看III主题帖子e币
还有那个chmod是设置权限的命令,除了用r(4),w(2),x(1),-(0)等来赋予权限外,还可用数字来代替,权限0666继承shell的umask掩码0666&~022=&^022=0755。你可以用ls -l /dev/来察看各设备的权限&
该用户从未签到主题帖子e币
very good~
该用户从未签到主题帖子e币
very good~
0666代表权限-rw-r--r--&
有host接口的机子真强大,接设像头,游戏手柄,键盘,鼠标,移动磁盘,总之外围一大串设备&
签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
签到天数: 2 天连续签到: 1 天[LV.1]初来乍到主题帖子e币
社区认证会员
社区认证会员
QQ已认证,此人靠谱
推荐阅读热门话题
61887420384328284281261252226217208204201192715
半小时前1&小时前1&小时前2&小时前4&小时前6&小时前6&小时前12&小时前14&小时前15&小时前昨天&23:53昨天&22:57昨天&22:41昨天&16:49昨天&16:32昨天&16:30
Powered by通过以下两种方式,可以在应用程序中使用摄像机
使用现有应用程序中Android摄像头应用程序
直接使用应用程序提供的Android摄像头API
使用现有应用程序的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)
这种方法已在活动&activity&类被定义。从主活动调用它。有在做同样的工作的活动类中定义的方法,但是当它不是从活动要求,但在其他地方使用。它们被列在下面:
活动功能说明
startActivityForResult(Intent intent, int requestCode, Bundle options)
它开始的活动,但可以利用它选择额外的包
startActivityFromChild(Activity child, Intent intent, int requestCode)
启动活动时,活动是任何其他活动的子活动
startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options)
它的工作与上述相同,但它可以在捆绑与它的形状采取额外的值
startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)
它启动的碎片活动当前所在内部
startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options)
它不仅启动从碎片的活性,但可以采用额外的值
不管用来启动其活动功能,它们都返回结果。其结果可以通过覆盖 onActivityResult 方法获得。
这里有一个例子,说明如何启动现有的摄像机应用程序捕获的图像和位图的形式显示结果
为了试验这个例子,需要在支持摄像机的实际设备上运行此应用程序。
使用Eclipse IDE创建Android应用程序,并将其命名为Camera。在创建这个项目,确保目标SDK编译在Android SDK中的最新版本或使用更高级别的API。
修改src/MainActivity.java&文件中添加意图启动活动代码,由result方法来接受输出。
修改所需的布局XML文件&res/layout/activity_main.xml&添加GUI组件。在这里,我们只添加ImageView和一个TextView
修改res/values/strings.xml&定义所需的常量值
运行应用程序并选择运行Android设备,并在其上安装的应用和验证结果。
以下是修改后的主活动文件的内容:src/com.yiibai.camera/MainActivity.java.
package com.example.camera;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView imgFavorite;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgFavorite = (ImageView)findViewById(R.id.imageView1);
imgFavorite.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
public void open(){
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Bitmap bp = (Bitmap) data.getExtras().get(&data&);
imgFavorite.setImageBitmap(bp);
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
以下是文件&res/layout/activity_main.xml file 的内容:
xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:paddingBottom=&@dimen/activity_vertical_margin&
android:paddingLeft=&@dimen/activity_horizontal_margin&
android:paddingRight=&@dimen/activity_horizontal_margin&
android:paddingTop=&@dimen/activity_vertical_margin&
tools:context=&.MainActivity&
android:id=&@+id/imageView1&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:layout_marginLeft=&34dp&
android:layout_marginTop=&36dp&
android:contentDescription=&@string/hello_world&
android:src=&@drawable/ic_launcher&
android:id=&@+id/textView1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentTop=&true&
android:layout_alignRight=&@+id/imageView1&
android:text=&@string/tap&
android:textAppearance=&?android:attr/textAppearanceLarge&
以下将是&res/values/strings.xml&的内容,以定义一个新的常量
&?xml version=&1.0& encoding=&utf-8&?&
name=&app_name&Camera
name=&action_settings&Settings
name=&hello_world&Hello world!
name=&tap&Tap the image to open the camera!!
以下是 AndroidManifest.xml 的默认内容:
&?xml version=&1.0& encoding=&utf-8&?&
xmlns:android=&/apk/res/android&
package=&com.yiibai.camera&
android:versionCode=&1&
android:versionName=&1.0&
android:minSdkVersion=&8&
android:targetSdkVersion=&17&
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme&
android:name=&com.yiibai.camera.MainActivity&
android:label=&@string/app_name&
android:name=&android.intent.action.MAIN&
android:name=&android.intent.category.LAUNCHER&
让我们试着运行相机应用程序。假设已经连接实际的Android移动设备到计算机。显示如下窗口,选择要运行的Android应用程序的选项。
选择移动设备作为一个选项,然后检查您的移动设备将显示如下界面:
现在只需轻点图标的android的图像,相机将被打开。只需拍摄一张照片。捕获后,两个按钮就会出现或者把它丢弃
只需按下抽动(绿色)按钮,将被带回应用程序使用Android图标拍摄的图像
直接使用应用程序提供的Android摄像头API
使用照相机API给摄像机整合在应用中
首先,需要使用静态方法通过API calledCamera.open提供并初始化相机对象。它的语法如下:
Camera object = null;
object = Camera.open();
除了上述功能,也有这是下面列出由Camera类提供的其它功能
方法 & 描述
getCameraInfo(int cameraId, Camera.CameraInfo cameraInfo)
它返回一个特定摄像机信息
getNumberOfCameras()
它返回限定的可用的设备上的照相机的整数
它被用来锁定相机,所以没有其他应用程序可以访问它
它被用来释放在镜头锁定,所以其他应用程序可以访问它
open(int cameraId)
它是用来打开特定相机时,支持多个摄像机
enableShutterSound(boolean enabled)
它被用来使能/禁止图像俘获的默认快门声音
现在,需要做一个独立的类和SurfaceView扩展它并实现SurfaceHolder接口。
已经使用的两种类具有以下目的
它是用来控制摄像机和拍摄图像或从相机拍摄的视频
SurfaceView
这个类是用来展示实时摄像头预览给用户
必须调用摄像机类的预览方法来启动摄像机的预览给用户
public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback {
private Camera theCamera;
public void surfaceCreated(SurfaceHolder holder) {
theCamera.setPreviewDisplay(holder);
theCamera.startPreview();
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3){
public void surfaceDestroyed(SurfaceHolder arg0) {
除了预览,可以使用照相机API提供的其它功能中设置的摄像机的其它选项
方法 & 描述
startFaceDetection()
此功能启动人脸检测相机
stopFaceDetection()
它是用来阻止其通过上述功能启用的脸部检测
startSmoothZoom(int value)
这需要一个整数值,并调整摄像机的焦距非常顺畅的值
stopSmoothZoom()
它是用来阻止摄像机的变焦
stopPreview()
它是用来阻止相机的预览给用户
takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)
它被用来使能/禁止图像拍摄的默认快门声音
下面的例子演示了摄像机API的应用程序中的使用
为了试验这个例子中,需要搭载最新的Android OS实际的移动设备,因为摄像机不支持模拟器
使用Android Studio创建Android应用程序,并将其命名为:Camera。在创建这个项目,确保目标SDK和编译在Android SDK的最新版本或使用更高级别的API。
修改src/MainActivity.java文件引用添加摄像机的代码,并获得了XML的组件
创建一个新的文件ShowCamera.java使用SurfaceView扩展和实现SurfaceHolder接口。
修改所需的布局XML文件res/layout/activity_main.xml&添加GUI组件。在这里我们只添加FrameView,一个按钮和一个ImageView。
修改 res/values/strings.xml&定义所需的常量值
修改 AndroidManifest.xml&如下图所示,添加必要的权限摄像机
运行应用程序并选择运行Android的设备,并在其上安装的应用和验证结果。
下面是修改后的主活动文件&src/com.yiibai.camera1/MainActivity.java.&的内容。
package com.example.camera1;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Camera cameraObject;
private ShowCamera showCamera;
private ImageView pic;
public static Camera isCameraAvailiable(){
Camera object = null;
object = Camera.open();
catch (Exception e){
return object;
private PictureCallback capturedIt = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
if(bitmap==null){
Toast.makeText(getApplicationContext(), &not taken&, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), &taken&, Toast.LENGTH_SHORT).show();
cameraObject.release();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pic = (ImageView)findViewById(R.id.imageView1);
cameraObject = isCameraAvailiable();
showCamera = new ShowCamera(this, cameraObject);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(showCamera);
public void snapIt(View view){
cameraObject.takePicture(null, null, capturedIt);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
创建新java文件:src/com.yiibai.camera1/ShowCamera.java.&并添加以下代码&
package com.example.camera1;
import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holdMe;
private Camera theCamera;
public ShowCamera(Context context,Camera camera) {
super(context);
theCamera = camera;
holdMe = getHolder();
holdMe.addCallback(this);
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
public void surfaceCreated(SurfaceHolder holder) {
theCamera.setPreviewDisplay(holder);
theCamera.startPreview();
} catch (IOException e) {
public void surfaceDestroyed(SurfaceHolder arg0) {
修改&res/layout/activity_main.xml&的内容&
&?xml version=&1.0& encoding=&utf-8&?&
xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:orientation=&horizontal&
android:layout_width=&wrap_content&
android:layout_height=&match_parent&
android:layout_weight=&0.30&
android:orientation=&vertical&
android:id=&@+id/camera_preview&
android:layout_width=&fill_parent&
android:layout_height=&199dp&
android:id=&@+id/button_capture&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:onClick=&snapIt&
android:text=&@string/Capture&
android:id=&@+id/imageView1&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:scaleType=&fitXY&
android:src=&@drawable/ic_launcher&
& /LinearLayout&
修改&res/values/string.xml&的内容&
&?xml version=&1.0& encoding=&utf-8&?&
name=&app_name&Camera1
name=&action_settings&Settings
name=&hello_world&Hello world!
name=&Capture&Capture
修改AndroidManifest.xml&的内容,并添加必要的权限,如下图所示。
&?xml version=&1.0& encoding=&utf-8&?&
xmlns:android=&/apk/res/android&
package=&com.yiibai.camera1&
android:versionCode=&1&
android:versionName=&1.0&
android:minSdkVersion=&8&
android:targetSdkVersion=&17&
android:name=&android.permission.CAMERA&
android:name=&android.hardware.camera&
android:name=&android.hardware.camera.autofocus&
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme&
android:name=&com.yiibai.camera1.MainActivity&
android:label=&@string/app_name&
android:name=&android.intent.action.MAIN&
android:name=&android.intent.category.LAUNCHER&
让我们试着运行&Camera&应用程序。假设已经连接实际的Android移动设备到计算机。启动应用程序之前会显示如下窗口,选择要运行的Android应用程序的选项。
选择移动设备作为一个选项,然后检查移动设备将显示如下界面:
相机将开始显示在上半屏的预览。只需点击捕捉按钮。现在,可以存储所拍摄的图像,将其上传到网上或者是放弃它。
加QQ群啦!
JAVA技术QQ群:
MySQL/SQL语句QQ群:
Python QQ群:
大数据开发技术:
易百教程移动端:请扫描本页面底部(右侧)二维码关注微信公众号,或直接手机访问:
上一篇:下一篇:

我要回帖

更多关于 android studio 的文章

 

随机推荐