当前位置:操作系统 > 安卓/Android >>

我的Android笔记(五)——调用相机并将照片存储到sd卡上

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

用Intent启动相机的代码:

[java]
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 1); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 1);
拍完照后就可以在onActivityResult(int requestCode, int resultCode, Intent data)中获取到Bitmap对象了。

[java]
Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
   Bitmap bitmap = (Bitmap) data.getExtras().get("data");


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


[java]
String sdStatus = Environment.getExternalStorageState(); 
        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用  
            Log.v("TestFile", 
                    "SD card is not avaiable/writeable right now."); 
            return; 
        } 
 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”


[java]
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(); 
    } 

   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文件中配置权限:


[html]
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

-----------------------------------------------------------------------------------------------------

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

完整代码如下:

MyCaremaActivity.java

 

[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 bitma

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,