Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据。 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种即可。

用Intent启动相机的代码:

Intent intent = 
new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent, 1);

拍完照后就可以在onActivityResult(int requestCode, int resultCode, Intent data)中获取到Bitmap对象了。

Bitmap bitmap = (Bitmap) data.getExtras().get("data");

要将图像存储到sd卡之前最好先检查一下sd卡是否可用

    String sdStatus = Environment.getExternalStorageState();

            
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { 
//
 检测sd是否可用

                Log.v("TestFile",

                        "SD card is not avaiable/writeable right now.");

                
return;

            }

以下代码可以实现将图像文件存到“sdcard/myImage/”文件夹下,名称为“111.jpg”

            File file = 
new File("/sdcard/myImage/");

            file.mkdirs();
//
 创建文件夹

            String fileName = "/sdcard/myImage/111.jpg";

try {

                b = 
new FileOutputStream(fileName);

                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);
//
 把数据写入文件

            } 
catch (FileNotFoundException e) {

                e.printStackTrace();

            } 
finally {

                
try {

                    b.flush();

                    b.close();

                } 
catch (IOException e) {

                    e.printStackTrace();

                }

            }

另外要注意的是读写sd卡文件必须首先要在Mainifest.xml文件中配置权限:

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

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

一个demo,实现调用系统相机拍照,将其显示在屏幕上,并且存到sd卡。

完整代码如下:

MyCaremaActivity.java

package barry.android.c;

import java.io.File;


import java.io.FileNotFoundException;


import java.io.FileOutputStream;


import java.io.IOException;

import android.app.Activity;


import android.content.Intent;


import android.graphics.Bitmap;


import android.os.Bundle;


import android.os.Environment;


import android.provider.MediaStore;


import android.util.Log;


import android.view.View;


import android.view.View.OnClickListener;


import android.widget.Button;


import android.widget.ImageView;

public 
class MyCaremaActivity 
extends Activity {

@Override

    
public 
void onCreate(Bundle savedInstanceState) {

        
super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(
new OnClickListener() {

@Override

            
public 
void onClick(View v) {

                Intent intent = 
new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(intent, 1);

            }

        });

    }

@Override

    
protected 
void onActivityResult(
int requestCode, 
int resultCode, Intent data) {

        
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == Activity.RESULT_OK) {

String sdStatus = Environment.getExternalStorageState();

            
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { 
//
 检测sd是否可用

                Log.v("TestFile",

                        "SD card is not avaiable/writeable right now.");

                
return;

            }

Bundle bundle = data.getExtras();

            Bitmap bitmap = (Bitmap) bundle.get("data");
//
 获取相机返回的数据,并转换为Bitmap图片格式

            FileOutputStream b = 
null;

            File file = 
new File("/sdcard/myImage/");

            file.mkdirs();
//
 创建文件夹

            String fileName = "/sdcard/myImage/111.jpg";

try {

                b = 
new FileOutputStream(fileName);

                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);
//
 把数据写入文件

            } 
catch (FileNotFoundException e) {

                e.printStackTrace();

            } 
finally {

                
try {

                    b.flush();

                    b.close();

                } 
catch (IOException e) {

                    e.printStackTrace();

                }

            }

((ImageView) findViewById(R.id.imageView)).setImageBitmap(bitmap);
//
 将图片显示在ImageView里

        }

    }

}

main.xml

<?
xml version="1.0" encoding="utf-8"
?>


<
LinearLayout 
xmlns:android
="http://schemas.android.com/apk/res/android"

    android:layout_width
="fill_parent"

    android:layout_height
="fill_parent"

    android:orientation
="vertical"
 
>

<
Button
        
android:id
="@+id/button"

        android:layout_width
="fill_parent"

        android:layout_height
="wrap_content"

        android:text
="点击启动相机"
 
/>

<
ImageView
        
android:id
="@+id/imageView"

        android:layout_width
="fill_parent"

        android:layout_height
="fill_parent"

        android:background
="#999999"
 
/>

</
LinearLayout
>

AndroidMainifest.xml

<?
xml version="1.0" encoding="utf-8"
?>


<
manifest 
xmlns:android
="http://schemas.android.com/apk/res/android"

    package
="barry.android.c"

    android:versionCode
="1"

    android:versionName
="1.0"
 
>

<
uses-sdk 
android:minSdkVersion
="7"
 
/>

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

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

<
application
        
android:icon
="@drawable/ic_launcher"

        android:label
="@string/app_name"
 
>

        
<
activity
            
android:label
="@string/app_name"

            android:name
=".MyCaremaActivity"
 
>

            
<
intent-filter 
>

                
<
action 
android:name
="android.intent.action.MAIN"
 
/>

<
category 
android:name
="android.intent.category.LAUNCHER"
 
/>

            
</
intent-filter
>

        
</
activity
>

    
</
application
>

</
manifest
>

Android调用相机并将照片存储到sd卡上的更多相关文章

  1. 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)

    package com.kkdiangame.UI.res; import java.io.ByteArrayOutputStream; import java.io.File; import jav ...

  2. Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上

    假设使用默认的系统管理,默认放在包以下.比較省心.并且在卸载app后不会造成数据残留.可是这样也有一个问题.比方我做一个背单词的软件,那么当用户卸载掉这个app时,他辛辛苦苦下载的单词库也没了... ...

  3. android调用照相机拍照获取照片并做简单剪裁

    引用转载http://www.cnblogs.com/eyu8874521/archive/2012/07/20/2600697.html 效果: 客服端代码:   package com.cn.lx ...

  4. Android数据存储之SD卡

    为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...

  5. File存对象--android 的File存储到SD卡();

    方法1:android File存对象--File存储到SD卡(); 1.保存对象到本地或SD卡需要注意的是,要保存的对象(OAuthV1)一定要实现了Serializable接口.实现了Serial ...

  6. Android 4.0以后正确的获取外部sd卡存储目录

    刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...

  7. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  8. android中读取SD卡上的数据

    通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...

  9. Android开发之SD卡上文件操作

    1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...

随机推荐

  1. 自定义View实现图片的绘制、旋转、缩放

    1.图片 把一张JPG图片改名为image.jpg,然后拷贝到项目的res-drawable中. 2.activity_main.xml <LinearLayout xmlns:android= ...

  2. Redis pipeline and list

    Redis Redis 是一个开源的基于内存的数据结构存储器.通常可作为数据库,缓存和消息中介.它支持的数据结构有:字符串.哈希表.列表.集合.支持范围查询的有序集合.位图.hyperloglogs和 ...

  3. Golang做的验证码(2)

    前面一篇文章介绍了2个用Golang做的验证码 http://www.cnblogs.com/ghj1976/p/3392847.html  这里再补充几个: 1.在GAE上使用的Google的验证码 ...

  4. 错误记录:html隐藏域的值存字符串时出错

    问题 webform在后台给前台传值.  <input type="hidden" value="<%=userType %>" id=&qu ...

  5. div模拟的下拉框特效

    随笔- 4 文章- 0 评论- 0 ? <style type="text/css"> body, ul, li { margin: 0; padding: 0; fo ...

  6. windows10UWP开发真机调试时遇到DEP6100和DEP6200解决办法

    windows10UWP开发真机调试时遇到DEP6100和DEP6200(其实未连接上设备都会报这两个错误,无论真机还是虚拟机)…… 此方法适合真机调试时遇到: 弹出提示框要求输入配对码,无论如何输入 ...

  7. Java与云计算有什么关系呢

    在如今这个信息技术高速发展的今天,云计算已经不是一个陌生的概念了,但是,当云计算遇到java将会有什么样的问题产生呢?下面,新霸哥将会为你揭晓Java与云计算之间的关系. 众所周知,java是一种应用 ...

  8. (转载)OC学习篇之---类的延展

    前一篇文章我们介绍了类的类目概念和使用,那么这篇文章我们继续来介绍一下OC中的一个特性:延展. 其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前 ...

  9. 转】MyEclipse使用总结——MyEclipse10安装SVN插件

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/3497016.html 感谢! 一.下载SVN插件subclipse 下载地址:http://subclipse. ...

  10. 转】使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4239006.html 感谢! 一.问题描述 今天在MyEclipse中使用Maven编译项目源代码时,结果如下了 ...