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. 嵌入式 uboot引导kernel,kernel引导fs

    1.uboot引导kernel: u-boot中有个bootm命令,它可以引导内存中的应用程序映像(Kernel),bootm命令对应 common/cmd_bootm.c中的do_bootm()函数 ...

  2. 8、NFC技术:让Android自动打开网页

    创建封装Uri的NdefRecord  public  NdefRecord  createUri(String  uriString);  public  NdefRecord  cre ...

  3. qt信号signal和槽slot机制

    内容: 一.概述 二.信号 三.槽 四.信号与槽的关联 五.元对象工具 六.程序样例 七.应注意的问题 信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工 ...

  4. Native App、Web App 还是Hybrid App?

    一.什么是Native App? Native App即原生应用,即我们一般所称的客户端,是针对不同手机系统单独开发的本地应用,如需使用需要先下载到手机并安装,下载Native App的最常见方法是访 ...

  5. 关于面试mysql优化的几点纪要

    1.减少查询次数 ,如何减少 ?  2. 表结构优化,如何优化 ? 3. 列选取原则  ? 4.建索引原则   ? 5.mysql语句优化 ?   6.增加mysql处理性能 ? 通过这几点, 再来说 ...

  6. 通过ajax提交form表单

    $.ajax({ url : 'deliveryWarrant/update.do', data : $('#myform').serialize(), type : "POST" ...

  7. Windows Azure 虚拟网络配置(Site to Site)

    上篇我们创建了Point to Site的虚拟网络连接,来满足客户端到云端网络的连接.本篇文章我们将创建Site to Site的虚拟网络连接,以满足本地网络到云端的网络连接. 创建与配置过程与上篇较 ...

  8. 《Java数据结构与算法》笔记-CH5-链表-2单链表,增加根据关键字查找和删除

    /** * Link节点 有数据项和next指向下一个Link引用 */ class Link { private int iData;// 数据 private double dData;// 数据 ...

  9. 关闭HTML5只能提示(form上新增novalidate)

    <form novalidate>    <input type="text" required />    <input type="su ...

  10. cc.Sprite

    Classcc.Sprite Defined in: CCSprite.js Extends cc.NodeRGBA Class Summary Constructor Attributes Cons ...