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. 【进阶——最小费用最大流】hdu 1533 Going Home (费用流)Pacific Northwest 2004

    题意: 给一个n*m的矩阵,其中由k个人和k个房子,给每个人匹配一个不同的房子,要求所有人走过的曼哈顿距离之和最短. 输入: 多组输入数据. 每组输入数据第一行是两个整型n, m,表示矩阵的长和宽. ...

  2. ylbtech-QQ(腾讯)-群

    ylbtech-DatabaseDesgin:ylbtech-QQ(腾讯)-Account-账户模块, Role-角色.权限模块, Message-消息模块, Qzone-QQ空间,Contacts- ...

  3. 被投资人“送”入看守所 z

    http://news.cnblogs.com/n/506969/ 拜读了[[畅言]读<被投资人“送”入看守所>一文有感]一文有感,很想跟作者探讨几句.虽然他的看法很有理性,但站在一个刑案 ...

  4. Drupal 7.23:函数drupal_alter()注释

    /** * Passes alterable variables to specific hook_TYPE_alter() implementations. * * This dispatch fu ...

  5. OE7设置菜单为什么这么少?

    默认安装的OE7设置菜单只有很少的功能: 如果需要更多的OE定制,必须开启“技术特性”选项:

  6. bjfu1253 最大上升子序列和

    n^2的算法就行,很简单的动态规划.直接上代码 /* * Author : ben */ #include <cstdio> #include <cstdlib> #inclu ...

  7. jQuery需要掌握的技巧

    检查 jQuery 是否加载 在使用 jQuery 进行任何操作之前,你需要先确认它已经加载: if (typeof jQuery == 'undefined') { console.log('jQu ...

  8. opencv3.0 在 android 上的使用

    下载 OpenCV-3.0.0-android-sdk-1.zip 打开 intellj,新建立一个 android 工程后选择工程属性,导入模块(Import module from externa ...

  9. collect my database for test KCF tracker tools

    Path Button used to set dir where avi file saves, set path set video size and start record write to ...

  10. spring BeanFactory概述

    BeanFactory是Spring提供的两种容器类型之一,它是基础的IoC容器,并提供完整的IoC服务支持.如果没有指定,默认采用延迟初始化策略.只有当客户端对象需要访问容器中的某个受管对象的时候, ...