调用相机应用

1.如果需要将照片保存到手机时需要添加sdcard读写权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.fanhy.mycamera"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.fanhy.mycamera.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    
   <!--  添加外部存储写权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

2.Java程序代码

  1 package com.fanhy.mycamera;
  2 
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 import java.util.Calendar;
  8 import java.util.Locale;
  9 
 10 import android.app.Activity;
 11 import android.content.Intent;
 12 import android.graphics.Bitmap;
 13 import android.os.Bundle;
 14 import android.os.Environment;
 15 import android.provider.MediaStore;
 16 import android.text.format.DateFormat;
 17 import android.util.Log;
 18 import android.view.View;
 19 import android.view.View.OnClickListener;
 20 import android.widget.Button;
 21 import android.widget.ImageView;
 22 import android.widget.Toast;
 23 
 24 public class MainActivity extends Activity {
 25     /** Called when the activity is first created. */
 26     private Button button;
 27 
 28     @Override
 29     public void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.activity_main);
 32         button = (Button) findViewById(R.id.btn);
 33         button.setOnClickListener(new OnClickListener() {
 34 
 35             @Override
 36             public void onClick(View v) {
 37                 // 调用相机应用
 38                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 39                 startActivityForResult(intent, 1);
 40             }
 41         });
 42     }
 43 
 44     /**
 45      * 将照片保存到sdcard,需要添加外部存储的写权限
 46      * */
 47     @Override
 48     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 49         // TODO Auto-generated method stub
 50         super.onActivityResult(requestCode, resultCode, data);
 51         if (resultCode == Activity.RESULT_OK) {
 52             String sdStatus = Environment.getExternalStorageState();
 53             if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
 54                 Log.i("TestFile",
 55                         "SD card is not avaiable/writeable right now.");
 56                 return;
 57             }
 58             
 59             // 格式化时间
 60             String name = new DateFormat().format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".jpg";    
 61             Toast.makeText(this, name, Toast.LENGTH_LONG).show();
 62             // 获取相机应用返回的bundle对象
 63             Bundle bundle = data.getExtras();
 64             // 获取相机返回的数据,并转换为Bitmap图片格式
 65             Bitmap bitmap = (Bitmap) bundle.get("data");
 66         
 67             FileOutputStream b = null;
 68            // 指定保存路径
 69             File file = new File("storage/sdcard0/myImage/");
 70             // 创建文件夹
 71             file.mkdirs();
 72             // 文件名
 73             String fileName = "storage/sdcard0/myImage/"+name;
 74 
 75             try {
 76                 b = new FileOutputStream(fileName);
 77                 // 压缩图片
 78                 /**
 79                  * 作用:将一个位图压缩成一个文件
 80                  * 
 81                  * 参数1 CompressFormat format            图片格式
 82                  * 参数2    int quality                        图片质量:0到100有效整数,数字越大表示质量越高,同样耗用资源也越大
 83                  * 参数3 OutputStream stream                输出流:通常用来指定文件存储到流对应的文件
 84                  * */
 85                 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
 86             } catch (FileNotFoundException e) {
 87                 e.printStackTrace();
 88             } finally {
 89                 try {
 90                     b.flush();
 91                     b.close();
 92                 } catch (IOException e) {
 93                     e.printStackTrace();
 94                 }
 95             }
 96             // 将图片显示在ImageView里
 97             ((ImageView) findViewById(R.id.img)).setImageBitmap(bitmap);
 98         }
 99     }
100 }

 

posted on 2015-10-23 11:07  敬的男人  阅读(122)  评论(0)    收藏  举报