打开系统像机的功能
android中相机的使用很多,但是有时候我们还是会遇到一些坑,没办法填平,这里记录一下一些有用的东西
这里是通过 调用一个意图开打开的
/**
* @param view
*/
public void startCamera(View view){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}
当我们自己的应用程序在清单文件中添加
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" >
</category>
</intent-filter>
那么当别的应用程序调用这个意图来打开像机的时候,我们的这个应用也会出现在他调用像机的选择框中
获取系统橡机拍摄的照片
/* 打开系统像机的功能
* @param view
*/
public void startCamera(View view){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1234);
}
复写activity的方法 onActivityResult ,获取拍摄照片
@Override
rotected void onActivityResult(int requestCode, int resultCode, Intent arg2) {
super.onActivityResult(requestCode, resultCode, arg2);
if (resultCode== RESULT_OK) {
if (resultCode == 1234) {
Bundle bundle = arg2.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
}
}
打开系统相机,并获取高清照片
//设置自定义存储路径
mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/systemCemer";
//存储文件夹操作
File outFilePath = new File(mFilePath);
if (!outFilePath.exists()) {
outFilePath.mkdirs();
}
//设置自定义照片的名字
String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
mFilePath = mFilePath + "/" + fileName + ".jpg";
File outFile = new File(mFilePath);
Uri uri = Uri.fromFile(outFile);
//拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, 305);
获取照片的操作在Activity中
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode==RESULT_OK){
if (requestCode==305){
if (data!=null){
}else {
if (BuildConfig.DEBUG) Log.d("SystemCemerActivity", mFilePath);
final Bitmap bitmap = loadingImageBitmap(mFilePath);
if (bitmap!=null){
mImageView.setImageBitmap(bitmap);
}
}
}
}
这里面依据image 的path来获取了一个bitmap对象,然后将其设置给imageview来显示,使用到的loadingImageBitmap方法是用来加载高清大图的适当缩放功能的方法
public Bitmap loadingImageBitmap(String imagePath) {
/**
* 获取屏幕的宽与高
*/
final int width = getWindowManager().getDefaultDisplay().getWidth();
final int height = getWindowManager().getDefaultDisplay().getHeight();
/**
* 通过设置optios来只加载大图的尺寸
*/
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeFile(imagePath, options);
/**
* 计算手机宽高与显示大图的宽高,然后确定缩放有比例
*/
int widthRaio = (int) Math.ceil(options.outWidth/(float)width);
int heightRaio = (int) Math.ceil(options.outHeight/(float)height);
if (widthRaio>1&&heightRaio>1){
if (widthRaio>heightRaio){
options.inSampleSize = widthRaio;
}else {
options.inSampleSize = heightRaio;
}
}
/**
* 设置加载缩放后的图片
*/
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(imagePath, options);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}