目标效果:

  

第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚。

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>
2.MainActivity.java页面打开相机并获取传递回来的数据,两种方式第一个比较模糊,适合小图,第二个清楚些。
MainActivity.java页面:
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();}}}}}
}
3.因为打开的是系统相机,所以不需要添加打开相机的权限,如果想要在别的应用里选择打开系统相机时也出现你的应用,需要在AndroidManifest.xml页面进行设置。
AndroidManifest.xml页面:
<?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>
4.运行就可以显示目标效果了。

Android-打开系统相机并拍照两种显示方式。相关推荐

  1. android开启照相功能,Android打开系统相机并拍照的2种显示方法

    本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下 目标效果: 第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚. ...

  2. android 实现自动拍照,Android:调用系统相机实现拍照+裁切(兼容7.0以上系统)

    android.jpg 前言 在平时的工作中,我们会经常遇到这样的需求:比如更改用户头像,我们就需要打开相机或相册,选择照片后进行裁剪,最后上传给后台... 相信这样的功能对小伙伴们来说可能早已司空见 ...

  3. android调用系统相机实现拍照功能

    在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题. 虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个 ...

  4. Android 调用系统相机,拍照,并上传图片所注意的一些问题

    其实android拍照这个地方还是有很多注意事项的,我在上个项目中就遇到一些坑,因此我想把它记录下来,希望能帮助一些跟我遇到的同样的问题的人 如果你在项目中遇到以下问题: 通过系统路径,拍出来的图片不 ...

  5. android 调用 系统 相机 摄像机 拍照 拍视频

    主要内容如下: 系统现有相机应用的调用 系统现有相机拍摄照片 获取系统现有相机拍摄的图片 系统现有相机拍摄图片Demo 系统现有相机拍摄视频 系统现有相机拍摄视频Demo 系统现有相机应用的调用 对于 ...

  6. Android 调用系统api录音的两种方式(MediaRecorder、AudioRecord)

    废话 权限.权限.权限,必须要先获取了录音权限,其他的事情晚点再说. 另外,新版本的Android 10系统会对录音有调整,引入了一个录音焦点的概念,也就是说以前的麦克风只能一个APP使用,必须要等它 ...

  7. android 打开系统相机,

    1.第一步在androidmanifest.xml中注册 <uses-permission android:name="android.permission.WRITE_EXTERNA ...

  8. android打开系统相机分别获得原图和缩略图

    第一种:获得缩略图: 打开相机 private void photo() {Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_C ...

  9. Android学习之调用系统相机实现拍照功能

    一.今天,来介绍如何调用系统自带的相机进行拍照,主要有以下2种实现的方式: 1.Camera应用程序包含了一个意图过滤器,即intent filter,它使得开发人员能够提供与Camera应用程序同等 ...

最新文章

  1. Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战
  2. oracle和mysql登录方式_使用普通方式和连接池方式获取Oracle和Mysql链接
  3. vue @click 赋值_vue 手写一个时间选择器
  4. 2021青海高考文综成绩查询,2021年青海高考分数线预测 文理科录取分数线预测
  5. netbeans快捷键
  6. c#事件的发布-订阅模型_微信灰度测试订阅号付费功能,小米推出最便宜5G套餐,腾讯辟谣高管猝死赔钱事件,核心期刊发布十岁儿童文章,这就是今天的其他大新闻!...
  7. android 去掉标题栏、状态栏、横屏
  8. 链接服务器 因为它不存在或者您没有所需的权限。处理
  9. HDU 5876 关于补图的bfs
  10. VS2003/VS2005 常用快捷键
  11. qq语音识别_qq语音红包自动识别_qq语音红包一直未识别 - 云+社区 - 腾讯云
  12. leetcode container-with-most-water(medium) /java
  13. Java面试宝典(超级详细)
  14. 外贸人必收藏开发客户、找邮箱等高效工具
  15. Spark应用启动报错:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  16. 微信扫码提示在浏览器中打开的遮罩代码
  17. 如何突破安全狗远程桌面防护
  18. 以神奇“三”为本的逻辑与指号学----皮尔斯逻辑之三
  19. ps4手柄驱动linux,Arduino和单片机区别,及Arduino入门教程
  20. 中科院最年轻院士入职浙大!他一篇论文未发博士毕业!

热门文章

  1. Mysql之limit语句
  2. [Themeda启动器]用Java编写的Minecraft启动器
  3. EtherCAT运动控制卡小线段前瞻的连续插补运动
  4. 程序员课外拓展013:桌面云涉及到的概念
  5. SDUT-2933-人活着系列之Streetlights (Kruskal)
  6. 1. 大数据实时计算介绍
  7. python分隔符怎么用_如何使用不同分隔符切分字符串
  8. 医院计算机培训ppt,计算机培训讲义.ppt
  9. linuxprobe-第一节课
  10. 综述 | 图像计算传感器