android实现模拟微信调用相机和手机图库更换头像

您所在的位置:网站首页 模拟微信头像软件 android实现模拟微信调用相机和手机图库更换头像

android实现模拟微信调用相机和手机图库更换头像

2024-06-01 09:23| 来源: 网络整理| 查看: 265

前言

许多APP软件都用到了,手机里选择图库的或者拍照进行头像使用,在这些过程中涉及很多的权限问题,因涉及到用户的隐私层度还是比较深的,需要动态调用权限的方式。小编运用的是Android12版本实现的,经过多次测试加上老师的指导,现以完成此功能。

由于我的权限是没问题的,关于权限不足的问题,请移步。

1.在配置文件中添加权限

在application 中添加 android:requestLegacyExternalStorage="true" 如若android12的 还需在启动项添加 android:exported="true"

2.弹出对话框提示用户拍照或者是通过本地图库选择图片 private void takePhotoOrSelectPicture() { CharSequence[] items = {"拍照", "图库"};// 裁剪items选项 // 弹出对话框提示用户拍照或者是通过本地图库选择图片 new AlertDialog.Builder(MainActivity.this) .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { // 选择了拍照 case 0: // 创建文件保存拍照的图片 // 获取图片文件的filePath对象 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 指定输出到文件filePath中 intent.putExtra(MediaStore.EXTRA_OUTPUT, filePath); // 启动intent开始拍照 startActivityForResult(intent, TAKE_PHOTO); break; // 调用系统图库 case 1: // 创建Intent,用于打开手机本地图库选择图片 Intent intent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); // 启动intent打开本地图库 startActivityForResult(intent1, LOCAL_CROP); break; } } }).show(); } 3.拿到返回的数据展示图片 switch (requestCode) { case TAKE_PHOTO:// 拍照 if (resultCode == RESULT_OK) { Bitmap bitmap = data.getExtras().getParcelable("data"); // 展示图片 imageView.setImageBitmap(bitmap); } break; case LOCAL_CROP:// 系统图库 if (resultCode == RESULT_OK) { // 创建intent用于裁剪图片 Intent intent1 = new Intent("com.android.camera.action.CROP"); // 获取图库所选图片的uri Uri uri = data.getData(); intent1.setDataAndType(uri, "image/*"); // 设置裁剪图片的宽高 intent1.putExtra("outputX", 300); intent1.putExtra("outputY", 300); // 裁剪后返回数据 intent1.putExtra("return-data", true); // 启动intent,开始裁剪 startActivityForResult(intent1, CROP_PHOTO); } break; case CROP_PHOTO:// 裁剪后展示图片 if (resultCode == RESULT_OK) { // 展示图库中选择裁剪后的图片 if (data != null) { // 根据返回的data,获取Bitmap对象 Bitmap bitmap = data.getExtras().getParcelable("data"); // 展示图片 imageView.setImageBitmap(bitmap); } } break; } 完整代码 package com.fall.imageclean; import android.Manifest; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import java.io.File; public class MainActivity extends Activity { //初始化 private ImageView imageView;//图片显示的组件 private RelativeLayout relativeLayout;//点击出现拍照换图片的组件 private final String filePath = Environment.getExternalStorageDirectory() + File.separator + "output_image.jpg"; private static final int TAKE_PHOTO = 11;// 拍照 private static final int CROP_PHOTO = 12;// 裁剪图片 private static final int LOCAL_CROP = 13;// 本地图库 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //给组件找到对应的id imageView = findViewById(R.id.images); relativeLayout = findViewById(R.id.top_view); relativeLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { takePhotoOrSelectPicture();// 拍照或者调用图库 } }); } private void takePhotoOrSelectPicture() { CharSequence[] items = {"拍照", "图库"};// 裁剪items选项 // 弹出对话框提示用户拍照或者是通过本地图库选择图片 new AlertDialog.Builder(MainActivity.this) .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { // 选择了拍照 case 0: // 创建文件保存拍照的图片 // 获取图片文件的filePath对象 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 指定输出到文件filePath中 intent.putExtra(MediaStore.EXTRA_OUTPUT, filePath); // 启动intent开始拍照 startActivityForResult(intent, TAKE_PHOTO); break; // 调用系统图库 case 1: // 创建Intent,用于打开手机本地图库选择图片 Intent intent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); // 启动intent打开本地图库 startActivityForResult(intent1, LOCAL_CROP); break; } } }).show(); } /** * 调用startActivityForResult方法启动一个intent后, * 可以在该方法中拿到返回的数据 * 展示图片 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case TAKE_PHOTO:// 拍照 if (resultCode == RESULT_OK) { Bitmap bitmap = data.getExtras().getParcelable("data"); // 展示图片 imageView.setImageBitmap(bitmap); } break; case LOCAL_CROP:// 系统图库 if (resultCode == RESULT_OK) { // 创建intent用于裁剪图片 Intent intent1 = new Intent("com.android.camera.action.CROP"); // 获取图库所选图片的uri Uri uri = data.getData(); intent1.setDataAndType(uri, "image/*"); // 设置裁剪图片的宽高 intent1.putExtra("outputX", 300); intent1.putExtra("outputY", 300); // 裁剪后返回数据 intent1.putExtra("return-data", true); // 启动intent,开始裁剪 startActivityForResult(intent1, CROP_PHOTO); } break; case CROP_PHOTO:// 裁剪后展示图片 if (resultCode == RESULT_OK) { // 展示图库中选择裁剪后的图片 if (data != null) { // 根据返回的data,获取Bitmap对象 Bitmap bitmap = data.getExtras().getParcelable("data"); // 展示图片 imageView.setImageBitmap(bitmap); } } break; } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3