文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android如何调用外置摄像头

2023-06-29 17:12

关注

这篇文章主要介绍了Android如何调用外置摄像头的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android如何调用外置摄像头文章都会有所收获,下面我们一起来看看吧。

布局文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:android="http://schemas.android.com/apk/res/android">    <TextureView        android:id="@+id/textureview"        android:layout_width="1dp"        android:layout_height="1dp"/>    <ImageButton        android:id="@+id/play"        android:layout_width="60dp"        android:layout_height="60dp"        android:layout_centerHorizontal="true"        android:layout_alignParentBottom="true"        android:background="@drawable/ic_launcher_background"        android:contentDescription="@string/app_name"        android:layout_marginBottom="10dp"/></RelativeLayout>

相应的MainActivity.java的主要代码如下

package com.deepreality.takephotowithusbcamera;import android.Manifest;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.SurfaceTexture;import android.hardware.Camera;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.TextureView;import android.view.View;import android.widget.ImageButton;import android.widget.Toast;import com.tbruyelle.rxpermissions2.RxPermissions;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener, View.OnClickListener {    private static final String TAG = MainActivity.class.getSimpleName();    private Camera mCamera;    private ImageButton mPlayButton;    private RxPermissions rxPermissions;    private int permissionNum;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rxPermissions = new RxPermissions(MainActivity.this);        checkUserAllPermissions();        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(0);        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();    }        private void checkUserAllPermissions() {        rxPermissions                .requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE,                        Manifest.permission.CAMERA                )                .subscribe(permission -> {                    if (permission.granted) {                    } else if (permission.shouldShowRequestPermissionRationale) {                    } else {}                    permissionNum ++;                    if (permissionNum == 2) {                    }                });    }}

注意在清单文件里AndroidManifest.xml添加用户权限

<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

关于“Android如何调用外置摄像头”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Android如何调用外置摄像头”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯