• Android调用相机并将照片存储到sd卡上


    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 >
    复制代码
  • 相关阅读:
    CSS边框(圆角、阴影、背景图片)
    CSS3浏览器兼容
    HTML5全局属性
    HTLM5新增属性
    HTML5标签
    如何开始使用bootstrap
    重新了解Java基础(三)-运行机制&HelloWorld
    重新了解Java基础(二)-Java的特性
    Java关键字之native
    重新了解Java基础(一)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3165592.html
Copyright © 2020-2023  润新知