Android 调去照相程序拍照

和调用图库选择图片一样,调用相机程序拍照也是经常遇到的。

这里做个小总结:

private void takePhoto() {// 执行拍照前应该先判断SD卡否存

String SDState = Environment.getExternalStorageState();

if (SDState.equals(Environment.MEDIA_MOUNTED)) {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

ContentValues values = new ContentValues();

photoUri = this.getContentResolver().insert(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);

startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);

} else {

CommonUtil.showToast(DeviceDetailAddSelectPicActivity.this,

"内存卡存", Toast.LENGTH_LONG);

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

Log.d(TAG, "DeviceDetailAddSelectPicActivity is onActivityResult!");

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == Activity.RESULT_OK) {

doPhoto(requestCode, data);

} else if (resultCode == Activity.RESULT_CANCELED) {

CommonUtil.showToast(DeviceDetailAddSelectPicActivity.this,

"选择图片文件错", Toast.LENGTH_LONG);

return;

}

}

上述代码在大部分手机中可运行,但也遇到特殊情况。比如小米手机,在调用

photoUri = this.getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

预先往图片库插入数据时,报错,提示unable to create new file。

java.lang.IllegalStateException: Unable to create new file: /storage/sdcard0/DCIM/Camera/1406856476247.jpg
at android.os.Parcel.readException(Parcel.java:1433)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
at android.content.ContentResolver.insert(ContentResolver.java:934)
at com.ivcar.weibo.ui.send.WriteWeiboActivity.onClick(WriteWeiboActivity.java:173)

参考:http://stackoverflow.com/questions/13633308/android-contentresolver-insert-crashes-with-unable-to-create-new-file

(我已经加上了外置卡读写权限。)似乎小米有特殊的权限控制,这里一直没搞清楚。

这里我改用其它方法替代。

自定义图片存储路径并生成随机图片名,然后创建文件,生成URI,传个相机程序,以替代插入数据获取URI操作。

总结下,Android手机调用自带的照相机和图库程序

(1)调用android相册和相机的代码

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//调用android自带的照相机intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri); 
startActivityForResult(intent, 1);

(2 ) 调用图库程序

Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//调用android的图库
startActivityForResult(i, 2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值