Android 多媒体------相机

摘要:
如果没有,我们应该禁用和相机相关的功能!此外还需要保证我们有使用Camera的权限:或者:2.使用相机应用程序进行拍照实现拍照执行Intent对象实现:staticfinalintREQUEST_IMAGE_CAPTURE=1;privatevoiddispatchTakePictureIntent(){IntenttakePictureIntent=newIntent;if(takePictureIntent.resolveActivity(getPackageManager())!=null){startActivityForResult;}}下面是简单实现调用相机拍照并且将拍照结构显示在ImageView的实现代码:packagecom.example.hp.photointent;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.provider.MediaStore;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.ImageView;publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener{staticfinalintREQUEST_IMAGE_CAPTURE=1;privateImageViewmImageView;privateButtonbtn_take_photo;@OverrideprotectedvoidonCreate{super.onCreate;setContentView;init();}voidinit(){mImageView=findViewById;btn_take_photo=findViewById;btn_take_photo.setOnClickListener;}@OverridepublicvoidonClick{switch{caseR.id.btn_take_photo:dispatchTakePictureIntent();break;default:break;}}//Android的相机应用会把拍好的照片编码为缩小的Bitmap,使用extravalue的方式添加到返回的Intent当中//并传送给onActivityResult(),对应的Key为"data"。=null){startActivityForResult;}}}二.录像首先跟拍照一样需要获取相机权限,类似的,我们也是使用Intent对象来打开系统内置程序来录制视频。

一.拍照

1.设置使用相机权限

为了让用户知道我们的应用需要依赖相机,在Manifest清单文件中添加<uses-feature>标签:

<manifest ... >
    <uses-feature android:name="android.hardware.camera"
                  android:required="true" />
    ...
</manifest>

当然我们有必要在使用相机之前通过调用hasSystemFeature(PackageManager.FEATURE_CAMERA)方法来检查设备上是否有相机。如果没有,我们应该禁用和相机相关的功能!

此外还需要保证我们有使用Camera的权限:

<uses-permission android:name="android.permission.CAMERA2" />
或者:
<uses-permission android:name="android.permission.CAMERA" />

2.使用相机应用程序进行拍照

实现拍照执行Intent对象实现:

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

下面是简单实现调用相机拍照并且将拍照结构显示在ImageView的实现代码:

package com.example.hp.photointent;

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    static final int REQUEST_IMAGE_CAPTURE = 1;
    private ImageView mImageView;
    private Button btn_take_photo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    void init(){
        mImageView=(ImageView)findViewById(R.id.imageView1);
        btn_take_photo=(Button)findViewById(R.id.btn_take_photo);
        btn_take_photo.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch( view.getId()){
            case R.id.btn_take_photo:
                dispatchTakePictureIntent();
                break;
            default:
                break;

        }

    }
//Android的相机应用会把拍好的照片编码为缩小的Bitmap,使用extra value的方式添加到返回的Intent当中
//并传送给onActivityResult(),对应的Key为"data"。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); mImageView.setImageBitmap(imageBitmap); } } //调用拍照Intent private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } }

二.录像

首先跟拍照一样需要获取相机权限,类似的,我们也是使用Intent对象来打开系统内置程序来录制视频。

static final int REQUEST_VIDEO_CAPTURE = 1;

private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
}

Android的相机程序会把指向视频存储地址的URL添加到Intent中,所以我们可以通过返回的Idata来查看视频。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
        Uri videoUri = intent.getData();
        mVideoView.setVideoURI(videoUri);
    }
}

免责声明:文章转载自《Android 多媒体------相机》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇XStream xml 解析框架使用笔记vue 解决jsonp跨域下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Web Worker

写在前面 众所周知,JavaScript是单线程的,JS和UI更新共享同一个进程的部分原因是它们之间互访频繁,但由于共享同一个进程也就会造成js代码在运行的时候用户点击界面元素而没有任何响应这样的情况,这么糟糕的用户体验HTML5怎么会不修订了,这样Web Worker诞生了。 简介 Web Worker进程加载的js运行的时候不仅不会影响浏览器UI,而且...

rtx信息泄漏利结合弱口令导致被批量社工思路

腾讯通RTX(Real Time eXchange)是腾讯公司推出的企业级实时通信平台. rtx server 存在暴露用户信息的漏洞,通过web访问 http://RtxServerIp:8012/userlist.php #泄漏公司所有rtx用户 http://RtxServerIp:8012/getmobile.cgi?receiver= #泄漏用户...

正则表达式实现跨行匹配

正则表达式(Regular expression)可用来检查文本中是否包含指定模式的字符串,通常是按行来处理(POSIX标准),因为.操作符通常不匹配换行符,如果要匹配多行怎么处理呢?本文介绍正则表达式跨行匹配实现方法。 目录 1. sed 命令删除多行 2. Python正则表达式匹配多行 ① re.DOTALL 或者 re.S 参数 ② 表达式...

docker部署skywalking

一、概述 简介 skywalking是一个开放源码的,用于收集、分析,聚合,可视化来自于不同服务和本地基础服务的数据的可观察的平台, skywalking提供了一个简单的方法来让你对你的分布式系统甚至是跨云的服务有清晰的了解。 它更像是一个现代的系统性能管理,特别为分布式系统而设计。http://archive.apache.org/dist/skywal...

node.js

JavaScript单线程的误解 在我接触JavaScript(无论浏览器还是NodeJS)的时间里,总是遇到有朋友有多线程的需求。而在NodeJS方面,有朋友甚至直接说到,NodeJS是单线程的,无法很好的利用多核CPU。 诚然,在前端的浏览器中,由于前端的JavaScript与UI占据同一线程,执行JavaScript确实为UI响应造成了一定程度上的麻...

layui select下拉菜单联动

做的比较简单,先从后台直接把第一级菜单输出,然后点击二级菜单的时候再动态展示 <div class="layui-inline"> <label class="layui-form-label">商品类别</label> <div cl...