Android-打开系统相机并拍照两种显示方式。
目标效果:
第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚。
1.activity_main.xml页面设置布局。
activity_main.xml页面:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><Buttonandroid:id="@+id/btnOpenCamera"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="拍照立即显示" /><Buttonandroid:id="@+id/btnSavePhoto"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:text="拍照存储后显示" /><ImageViewandroid:id="@+id/ivShowPicture"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerHorizontal="true"android:layout_marginTop="130dp" />
</RelativeLayout>
package com.example.camera;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private Button btnOpenCamera, btnSavePhoto;private ImageView ivShowPicture;private static int REQUEST_CAMERA_1 = 1;private static int REQUEST_CAMERA_2 = 2;private String mFilePath;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化控件init();// 控件绑定点击事件bindClick();}// 初始化控件和变量private void init() {btnOpenCamera = (Button) findViewById(R.id.btnOpenCamera);btnSavePhoto = (Button) findViewById(R.id.btnSavePhoto);ivShowPicture = (ImageView) findViewById(R.id.ivShowPicture);mFilePath = Environment.getExternalStorageDirectory().getPath();// 获取SD卡路径mFilePath = mFilePath + "/" + "temp.png";// 指定路径}// 控件绑定点击事件private void bindClick() {btnOpenCamera.setOnClickListener(this);btnSavePhoto.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btnOpenCamera:// 拍照并显示图片openCamera_1();break;case R.id.btnSavePhoto:// 拍照后存储并显示图片openCamera_2();break;default:break;}}// 拍照并显示图片private void openCamera_1() {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机startActivityForResult(intent, REQUEST_CAMERA_1);}// 拍照后存储并显示图片private void openCamera_2() {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机Uri photoUri = Uri.fromFile(new File(mFilePath)); // 传递路径intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);// 更改系统默认存储路径startActivityForResult(intent, REQUEST_CAMERA_2);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) { // 如果返回数据if (requestCode == REQUEST_CAMERA_1) { // 判断请求码是否为REQUEST_CAMERA,如果是代表是这个页面传过去的,需要进行获取Bundle bundle = data.getExtras(); // 从data中取出传递回来缩略图的信息,图片质量差,适合传递小图片Bitmap bitmap = (Bitmap) bundle.get("data"); // 将data中的信息流解析为Bitmap类型ivShowPicture.setImageBitmap(bitmap);// 显示图片} else if (requestCode == REQUEST_CAMERA_2) {FileInputStream fis = null;try {fis = new FileInputStream(mFilePath); // 根据路径获取数据Bitmap bitmap = BitmapFactory.decodeStream(fis);ivShowPicture.setImageBitmap(bitmap);// 显示图片} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {fis.close();// 关闭流} catch (IOException e) {e.printStackTrace();}}}}}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.camera"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="17"android:targetSdkVersion="19" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.camera.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><!-- 注册相机功能,在别的程序Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);进行启动相机时也会选择是否启动该应用 --><intent-filter><action android:name="android.media.action.IMAGE_CAPTURE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity></application></manifest>
Android-打开系统相机并拍照两种显示方式。相关推荐
- android开启照相功能,Android打开系统相机并拍照的2种显示方法
本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下 目标效果: 第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚. ...
- android 实现自动拍照,Android:调用系统相机实现拍照+裁切(兼容7.0以上系统)
android.jpg 前言 在平时的工作中,我们会经常遇到这样的需求:比如更改用户头像,我们就需要打开相机或相册,选择照片后进行裁剪,最后上传给后台... 相信这样的功能对小伙伴们来说可能早已司空见 ...
- android调用系统相机实现拍照功能
在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题. 虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个 ...
- Android 调用系统相机,拍照,并上传图片所注意的一些问题
其实android拍照这个地方还是有很多注意事项的,我在上个项目中就遇到一些坑,因此我想把它记录下来,希望能帮助一些跟我遇到的同样的问题的人 如果你在项目中遇到以下问题: 通过系统路径,拍出来的图片不 ...
- android 调用 系统 相机 摄像机 拍照 拍视频
主要内容如下: 系统现有相机应用的调用 系统现有相机拍摄照片 获取系统现有相机拍摄的图片 系统现有相机拍摄图片Demo 系统现有相机拍摄视频 系统现有相机拍摄视频Demo 系统现有相机应用的调用 对于 ...
- Android 调用系统api录音的两种方式(MediaRecorder、AudioRecord)
废话 权限.权限.权限,必须要先获取了录音权限,其他的事情晚点再说. 另外,新版本的Android 10系统会对录音有调整,引入了一个录音焦点的概念,也就是说以前的麦克风只能一个APP使用,必须要等它 ...
- android 打开系统相机,
1.第一步在androidmanifest.xml中注册 <uses-permission android:name="android.permission.WRITE_EXTERNA ...
- android打开系统相机分别获得原图和缩略图
第一种:获得缩略图: 打开相机 private void photo() {Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_C ...
- Android学习之调用系统相机实现拍照功能
一.今天,来介绍如何调用系统自带的相机进行拍照,主要有以下2种实现的方式: 1.Camera应用程序包含了一个意图过滤器,即intent filter,它使得开发人员能够提供与Camera应用程序同等 ...
最新文章
- Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战
- oracle和mysql登录方式_使用普通方式和连接池方式获取Oracle和Mysql链接
- vue @click 赋值_vue 手写一个时间选择器
- 2021青海高考文综成绩查询,2021年青海高考分数线预测 文理科录取分数线预测
- netbeans快捷键
- c#事件的发布-订阅模型_微信灰度测试订阅号付费功能,小米推出最便宜5G套餐,腾讯辟谣高管猝死赔钱事件,核心期刊发布十岁儿童文章,这就是今天的其他大新闻!...
- android 去掉标题栏、状态栏、横屏
- 链接服务器 因为它不存在或者您没有所需的权限。处理
- HDU 5876 关于补图的bfs
- VS2003/VS2005 常用快捷键
- qq语音识别_qq语音红包自动识别_qq语音红包一直未识别 - 云+社区 - 腾讯云
- leetcode container-with-most-water(medium) /java
- Java面试宝典(超级详细)
- 外贸人必收藏开发客户、找邮箱等高效工具
- Spark应用启动报错:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
- 微信扫码提示在浏览器中打开的遮罩代码
- 如何突破安全狗远程桌面防护
- 以神奇“三”为本的逻辑与指号学----皮尔斯逻辑之三
- ps4手柄驱动linux,Arduino和单片机区别,及Arduino入门教程
- 中科院最年轻院士入职浙大!他一篇论文未发博士毕业!