首先要添加权限
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
调用摄像头拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//之所以用switch是因为用户可能还需要选择本地图片功能,我这里没有
switch (requestCode) {
case 1:
Bundle bundle = data.getExtras();
bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
saveImageToGallery(this, bitmap);//存储
sign();
try {
view.setImageBitmap(bitmap);// 将图片显示在ImageView里
} catch (Exception e) {
System.out.println("请拍照");
}
break;
default:
break;
}
}
public static void saveImageToGallery(Context context, Bitmap bitmap) {
File appDir = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath(), "image");
if (!appDir.exists()) {
// 目录不存在 则创建
appDir.mkdirs();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, fos); // 保存bitmap至本地
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
ScannerByReceiver(context, file.getAbsolutePath());
if (!bitmap.isRecycled()) {
// bitmap.recycle(); 当存储大图片时,为避免出现OOM ,及时回收Bitmap
System.gc(); // 通知系统回收
}
// Toast.makeText(context, "图片保存成功" ,
// Toast.LENGTH_SHORT).show();
}
}
/** Receiver扫描更新图库图片 **/
private static void ScannerByReceiver(Context context, String path) {
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.parse("file://" + path)));
}