android 表情相机demo,Android 利用系统相机进行简易拍照

参考:

一、基本步骤:

检查权限

检查是否有相机资源

通过FileProvide创建共享文件

启动相机

处理返回的数据

二、代码

1、获取完整照片

private static final int REQUEST_TAKE_PHOTO = 1;

private String currentPhotoPath;

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

/**

*Notice that the startActivityForResult() method is protected by a condition that *calls resolveActivity(), which returns the first activity component that can handle *the intent. Performing this check is important because if you call *startActivityForResult() using an intent that no app can handle, your app will *crash. So as long as the result is not null, it's safe to use the intent.

*粗略理解为检测是否有相机应用

**/

if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

File photoFile = null;

try {

//使用自定义函数创建文件

photoFile = createImageFile();

} catch (IOException ex) {

Log.d(TAG, "文件创建失败");

}

if (photoFile != null) {

//创建共享文件,由于Android7.0行为变更所以使用FileProvide共享文件,

//FileProvide是ContentProvide的子类,所以需要在Manifest中注册

/**

*

* android:name="android.support.v4.content.FileProvider"

* android:authorities="这里填写自己的包名要和getUriForFile()函数中传的一致"

* android:exported="false"

* android:grantUriPermissions="true">

*

* android:name="android.support.FILE_PROVIDER_PATHS"

*

* android:resource="@xml/file_paths">

*

*

*

*file_paths文件内容

*<?xml version="1.0" encoding="utf-8"?>

*

*

*

**/

Uri photoURI;

if (Build.VERSION.SDK_INT >= 24){

photoURI = FileProvider.getUriForFile(this,

getPackageName(),

photoFile);

}else {

photoURI = Uri.fromFile(photoFile);

}

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

}

}

}

/**

*创建文件函数

**/

private File createImageFile() throws IOException {

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());

String imageFileName = "IMG_" + timeStamp + "_";

//获取外部储存路径

File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

File image = File.createTempFile(

imageFileName,

".jpg",

storageDir

);

//保存当前文件的路径

currentPhotoPath = image.getAbsolutePath();

return image;

}

@Override

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

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK){

//处理图片信息处理

}

}

2、获取缩略图

调用系统相机拍照时,如果不传路径,图片默认返回缩略图。

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);

}

}

@Override

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

if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {

Bundle extras = data.getExtras();

Bitmap imageBitmap = (Bitmap) extras.get("data");

//继续处理

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值