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. Bootstrap学习笔记上(带源码)

    阅读目录 排版 表单 网格系统 菜单.按钮 做好笔记方便日后查阅o(╯□╰)o bootstrap简介: ☑  简单灵活可用于架构流行的用户界面和交互接口的html.css.javascript工具集 ...

  2. JAVA多线程二

    Thread.Join() join()函数表示等待当前线程结束,然后返回. public final synchronized void join(long millis) throws Inter ...

  3. Tesseract-OCR识别验证码

    1. 安装Tesseract-OCR,安装后测试下是否安装成功

  4. Initializing a Build Environment

    This section describes how to set up your local work environment to build the Android source files. ...

  5. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

  6. Android签名用keytool和jarsigner制作apk文件

    生成证书 keytool -genkey -alias aeo_android.keystore -keyalg RSA -validity -keystore aeo_android.keystor ...

  7. php--opp--1.什么是面向对象?

    面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...

  8. accordion data-options iconCls

    <div id="aa" class="easyui-accordion" style="width:500px;height:300px;&q ...

  9. 第三百四十三天 how can I 坚持

    今天又莫名其妙的烦起来了,好没劲. 现在还在看电视机<太阳的后裔>,晚上也没怎么吃饭,干吃了两个馒头,老干妈+生洋葱,好凄惨. 上班看了好长时间会,乱七八糟的. 坚决不跳槽,但得坚持自己的 ...

  10. Jquery添加移除样式

    获取与设置样式 获取class和设置class都可以使用attr()方法来完成.例如使用attr()方法来获取p元素的class,JQuery代码如下: var p_class = $("p ...