当前位置: 首页 > news >正文

厦门网站设计品牌企业互联网门户网站建设

厦门网站设计品牌企业,互联网门户网站建设,wordpress 文章插件,分析网站建设的论文一、简介 当使用了 AndroidX 后#xff0c;发现 startActivityForResult() 标记为过时了#xff0c;而是推荐我们使用 registerForActivityResult() 函数。 registerForActivityResult() 函数是 Android 中用于启动 Activity 结果回调的新方式。这个函数的目的是简化在 Act…一、简介 当使用了 AndroidX 后发现 startActivityForResult() 标记为过时了而是推荐我们使用 registerForActivityResult() 函数。 registerForActivityResult() 函数是 Android 中用于启动 Activity 结果回调的新方式。这个函数的目的是简化在 Activity 和 Fragment 之间进行启动其他 Activity 并接收结果的过程取代了传统的 startActivityForResult() 和 onActivityResult() 方法。 使用 registerForActivityResult() 函数您可以更容易地管理 Activity 结果的处理使代码更清晰和模块化。 AndroidX 介绍 AndroidX 是 Android 中的一个开发库旨在简化 Android 应用程序的开发和维护。AndroidX 提供了一组替代 Android Support Library 的库它们包括了新的功能、改进的性能和更好的兼容性以便开发人员更轻松地构建现代化、高质量的 Android 应用程序。 主要包括 新功能和改进 AndroidX 引入了许多新的功能和改进包括更好的 Jetpack 组件、性能优化、Kotlin 支持、Android 架构组件等以提高开发效率和用户体验。向后兼容性 AndroidX 专注于提供向后兼容性以确保应用程序在不同 Android 版本上能够稳定运行。这意味着即使您的应用使用了 AndroidX 库也可以在较旧的 Android 版本上运行。Jetpack 组件 AndroidX 包括了 Android Jetpack 组件这是一组库和工具旨在简化 Android 应用程序的常见开发任务例如导航、数据存储、UI 构建、生命周期管理等。Jetpack 组件的目标是提高应用程序的可维护性、稳定性和性能。 二、打开相册获取图像 1. 代码示例 public class MainActivity extends AppCompatActivity {private ActivityResultLauncherString mGalleryLauncher;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 需要事先注册mGalleryLauncher registerForActivityResult(// 获取内容回调函数的参数将是一个URInew ActivityResultContracts.GetContent(),// 回调函数this::handleGalleryResult);}private void openGallery() {if (mGalleryLauncher ! null) {// launch的输入参数是泛型对应ActivityResultLauncherStringmGalleryLauncher.launch(image/*);}}private void handleGalleryResult(Uri imageUri) {if (imageUri ! null) {try {Bitmap selectedBitmap MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);int rotation ImageUtil.getRotation(this, imageUri);Bitmap rotatedBitmap ImageUtil.rotateBitmap(selectedBitmap, rotation);// 后续处理逻辑} catch (Exception e) {e.printStackTrace();}}} }2. ImageUtil部分函数 public static Bitmap rotateBitmap(Bitmap bitmap, int rotation) {if (rotation 0) {return bitmap;}return rotateResizeBitmap(bitmap, rotation, 1f); }public static Bitmap rotateResizeBitmap(Bitmap source, float angle, float scale) {Matrix matrix new Matrix();matrix.postRotate(angle);if (scale ! 1f) {matrix.setScale(scale, scale);}return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); }public static int getRotation(Context context, Uri photoUri) {if (photoUri null) {return 0;}ExifInterface ei;try {InputStream inputStream context.getContentResolver().openInputStream(photoUri);ei new ExifInterface(inputStream);} catch (IOException e) {return 0;}int orientation ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);switch (orientation) {case ExifInterface.ORIENTATION_ROTATE_90:return 90;case ExifInterface.ORIENTATION_ROTATE_180:return 180;case ExifInterface.ORIENTATION_ROTATE_270:return 270;default:return 0;} }三、打开相机获取图像 因为使用的是系统相机应用所以也不需要额外申请相机权限了。 1. 代码示例 public class MainActivity extends AppCompatActivity {private ActivityResultLauncherIntent mCameraLauncher;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 需要事先注册mCameraLauncher registerForActivityResult(// 回调函数的参数将是一个ActivityResultnew ActivityResultContracts.StartActivityForResult(),// 回调函数this::handleCameraResult);}private void openCamera() {if (mCameraLauncher ! null) {// launch的输入参数是泛型对应ActivityResultLauncherIntentIntent takePictureIntent new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 确保有相机应用可用if (takePictureIntent.resolveActivity(getPackageManager()) ! null) {mCameraLauncher.launch(takePictureIntent);}}}private void handleCameraResult(ActivityResult result) {if (result.getResultCode() RESULT_OK) {Intent data result.getData();if (data ! null) {Bundle extras data.getExtras();if (extras ! null) {Uri uri data.getData();Bitmap imageBitmap (Bitmap) extras.get(data);// 后续处理逻辑}}}} }注意 由于Bundle本身能够携带的数据大小限制上面这种方式获取的相机图像分辨率通常很低。如果希望能够获取较大分辨率的图像则可以先将相机图像保存到本地再通过文件路径加载。具体方式如下 2. 修改openCamera() 在打开相机的Intent中添加一个文件输出的Uri告诉相机需要保存到指定位置。 private String mPhotoPath; // 用于存储文件保存的路径private void openCamera() {if (mCameraLauncher ! null) {// launch的输入参数是泛型对应ActivityResultLauncherIntentIntent takePictureIntent new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 确保有相机应用可用if (takePictureIntent.resolveActivity(getPackageManager()) ! null) {// 创建一个用于存储拍照结果的文件File photoFile ImageUtil.createImageFile(this);mPhotoPath photoFile.getAbsolutePath();Uri photoUri FileProvider.getUriForFile(this,com.afei.demo.provider, // 对应 AndroidManifest.xml 中的声明photoFile);takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);mCameraLauncher.launch(takePictureIntent);}} }3. ImageUtil.createImageFile() 代码 创建一个可写的文件即可。 public static File createImageFile(Context context) {String timeStamp new SimpleDateFormat(yyyyMMdd_HHmmss).format(new Date(System.currentTimeMillis()));String imageFileName JPEG_ timeStamp _;File storageDir context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);if (!storageDir.exists()) {storageDir.mkdirs();}File imageFile null;try {imageFile File.createTempFile(imageFileName, /* 文件名 */.jpg, /* 文件扩展名 */storageDir /* 存储目录 */);imageFile.setWritable(true);} catch (IOException e) {e.printStackTrace();}return imageFile; }4. 自定义的FileProvider 上述代码中还使用到了一个 FileProvider.getUriForFile() 方法作为四大组件之一也是需要在 AndroidManifest.xml 文件中声明和使用的。 a. AndroidManifest.xml 文件中 application...providerandroid:nameandroidx.core.content.FileProviderandroid:authoritiescom.afei.demo.providerandroid:exportedfalseandroid:grantUriPermissionstruemeta-dataandroid:nameandroid.support.FILE_PROVIDER_PATHSandroid:resourcexml/file_paths //provider /applicationauthorities 通常可以用 包名.provider。 b. xml/file_paths 文件 在 res 文件夹下面创建一个 xml 子文件夹并新建 file_paths.xml 文件文件名可以修改和AndroidManifest.xml中对应上就行内容如下 ?xml version1.0 encodingutf-8? paths xmlns:androidhttp://schemas.android.com/apk/res/androidexternal-pathnamemy_imagespath. / /paths关于FileProvider的使用这里不过多介绍了不清楚的可以查阅其他资料。 5. 修改 handleCameraResult(ActivityResult result) 这里就不再需要通过 ActivityResult 获取数据了而是从之前存储的 mPhotoPath 中获取。 private void handleCameraResult(ActivityResult result) {if (result.getResultCode() RESULT_OK) {Bitmap bitmap BitmapFactory.decodeFile(mPhotoPath);// 后续处理逻辑} }
http://www.zqtcl.cn/news/898458/

相关文章:

  • 公司做网站买域名之后做什么打鱼网站开发
  • 南京市城乡建设局网站二级建造师证件查询
  • 百度关键词优化系统网站优化师招聘
  • 网站方案建设书推广产品的软文怎么写
  • 网站栏目按扭邢台手机网站建设地方
  • 青浦赵巷网站建设做网站需要编程吗
  • 公司logo设计含义株洲seo
  • 公司制作网站做论坛网站怎么赚钱吗
  • 深圳 外贸 网站建设 龙医院网站建设价格
  • 网上建网站驰易网站建设
  • 建设工程招标专业网站网站联盟广告
  • 自建站英文公司网站制作银川
  • 顺德网站建设公司信息全网推广软件
  • 网站全屏视频怎么做电子商务网站规划的原则是什么
  • 网站建设行业发展史做网站主页上主要放哪些内容
  • 成都成华网站建设小程序开发网上商城
  • 企业网站建设的重要性和必要性深圳设计网站排行
  • 山西省网站建设河南省考生服务平台官网
  • 做水产的都用什么网站wordpress 前端登陆
  • 商务网站建设网站开发一个软件开发的流程
  • 网站建设电脑和手机有区别吗公众号登录微信入口
  • 天津市建设监理协会网站三亚网络网站建设
  • 义乌进货网平台北京网优化seo优化公司
  • 在网站上放广告网站建设流程效果
  • 腾讯云学生机做网站济南网站改版
  • 开封市做网站的公司wordpress无法映射
  • 网站构建工具wordpress 主题授权
  • 大型网站开发 赚钱宁夏网站建设优化
  • 通过ip访问网站需要怎么做博客的网站页面设计
  • 高明做网站软件开发工程师是前端还是后端