当前位置: 首页 > news >正文

android usb传输图片,关于Android接入USB外接摄像头以及控制拍照并保存图片

关于Android接入外接摄像头,首先毋庸置疑的是需要给你的app配置相应的权限

1.首先构建相应的视图view

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="${relativePackage}.${activityClass}" >

android:id="@+id/textureview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

android:id="@+id/play"

android:layout_width="60dp"

android:layout_height="60dp"

android:layout_centerHorizontal="true"

android:layout_alignParentBottom="true"

android:background="@drawable/ic_start"

android:contentDescription="@string/app_name"

android:layout_marginBottom="10dp"/>

2.获取到相应的camera对象,并完成拍照进行本地存储

package com.example.onecamera;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.SurfaceTexture;

import android.hardware.Camera;

import android.hardware.Camera.Size;

import android.media.CamcorderProfile;

import android.media.MediaRecorder;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.TextureView;

import android.view.TextureView.SurfaceTextureListener;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.Toast;

@SuppressWarnings("deprecation")

public class MainActivity extends Activity implements SurfaceTextureListener,

OnClickListener {

private static final String TAG = MainActivity.class.getSimpleName();

private Camera mCamera;

private ImageButton mPlayButton;

private boolean isRecord;

private MediaRecorder mMediaRecorder;

private CamcorderProfile mProfile;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mPlayButton = (ImageButton) findViewById(R.id.play);

mPlayButton.setOnClickListener(this);

((TextureView) findViewById(R.id.textureview))

.setSurfaceTextureListener(this);

}

private void takePic() {

if (mCamera != null) {

//调用抓拍摄像头抓拍

mCamera.takePicture(null, null, pictureCallback);

} else {

Log.e("TAG", "请检查摄像头!");

}

}

private Bitmap mBitmap;

public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {

@Override

public void onPictureTaken(byte[] data, Camera camera) {

Log.i("ygy", "onPictureTaken");

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

System.out.println(df.format(new Date()));// new Date()为获取当前系统时间

String picName = df.format(new Date());

Toast.makeText(getApplicationContext(), "正在保存...", Toast.LENGTH_LONG).show();

mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

File file = new File("/storage/emulated/0/" + picName + ".jpg");

try {

file.createNewFile();

BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file));

mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);

os.flush();

os.close();

Toast.makeText(getApplicationContext(), "图像保存成功", Toast.LENGTH_LONG).show();

} catch (IOException e) {

e.printStackTrace();

}

}

};

@Override

public void onSurfaceTextureAvailable(SurfaceTexture surface, int width,

int height) {

mCamera = Camera.open(1);

if (mCamera != null) {

try {

mCamera.setPreviewTexture(surface);

mCamera.startPreview();

} catch (IOException e) {

Log.d("TAG", e.getMessage());

}

}

}

@Override

protected void onStop() {

if (mCamera != null) {

mCamera.stopPreview();

mCamera.release();

mCamera = null;

}

super.onStop();

}

@Override

public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width,

int height) {

}

@Override

public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {

if (mCamera != null) {

mCamera.stopPreview();

mCamera.release();

mCamera = null;

}

return false;

}

@Override

public void onSurfaceTextureUpdated(SurfaceTexture surface) {

}

@Override

public void onClick(View v) {

if (mCamera == null) {

return;

}

takePic();

}

}

在完成以上操作之后仍无法调用到摄像头,请注意一下方法:mCamera = Camera.open(1); 这个并不是所有的android系统都是这个,有可能是mCamera = Camera.open(0); 这个根据实际情况来定

如果你做了以上操作成功了,但是移入到项目里面发现并不能行,那么请先检查你的camera是否有预览视图TextureView,如果你在布局文件里面没有放置TextureView来给camera显示,那么可能会导致你的camera无法进行拍照(我就是遇到这个坑,然后一直找不到原因,后来配置了一个宽高1dp的视图放在父布局里面就可以正常使用拍照了)。

相关文章:

  • 如何将html文件放入Android,关于android:将HTML文件加载到WebView中
  • nginx3解析php
  • 荣耀8 android8.0 2018,荣耀这次很良心! 荣耀8全系可以升级安卓8.0
  • web测试方法
  • html5文字游戏制作工具,橙光文字游戏制作工具
  • MySQL timestampdiff 和 timestampadd 的用法
  • android 特殊机型问题,这四款机型十分特殊,购买需要谨慎!
  • Python可迭代对象中的添加和删除(add,append,pop,remove,insert)
  • android tabbar框架,Android 自定义tabbar 用viewPage实现
  • jdbc参数
  • Linux运维人员最常用150个命令汇总
  • html js文件调用函数,我怎么把js文件里的函数调用到html文件中,并使两个函数依次运行?...
  • [poj] 3422 Kaka's Matrix Travels || 最小费用最大流
  • html引用json文件没有数据,json文件怎么使用
  • html做微信logo,HTML5新特性之用SVG绘制微信logo
  • 《Java编程思想》读书笔记-对象导论
  • 【css3】浏览器内核及其兼容性
  • 【RocksDB】TransactionDB源码分析
  • 2017届校招提前批面试回顾
  • JavaScript服务器推送技术之 WebSocket
  • js中的正则表达式入门
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Swoft 源码剖析 - 代码自动更新机制
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于web的全景—— Pannellum小试
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 想使用 MongoDB ,你应该了解这8个方面!
  • - 转 Ext2.0 form使用实例
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #define
  • #NOIP 2014# day.2 T2 寻找道路
  • (04)odoo视图操作
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)球球大作战
  • (day6) 319. 灯泡开关
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Java数据结构)ArrayList
  • (第一天)包装对象、作用域、创建对象
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (万字长文)Spring的核心知识尽揽其中
  • (一)Java算法:二分查找
  • (原創) 未来三学期想要修的课 (日記)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .CSS-hover 的解释
  • .java 9 找不到符号_java找不到符号