调用相机应用
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 }
浙公网安备 33010602011771号