Android调用相机并将照片存储到SD卡上实现方法

【转载】

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

读写sd卡文件必须首先要在Mainifest.xml文件中配置权限:

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

 

用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(); 

 private String getPhotoFileName() {
        Date date = new Date(System.currentTimeMillis());
        SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");         
        return dateFormat.format(date) + ".jpg";
    }

 

完整代码如下:

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里 
} 
} 
} 
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> 

 

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> 

 

 

 

posted on 2013-11-27 16:02  MasonChi  阅读(182)  评论(0编辑  收藏  举报

导航