热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android7自学笔记总结、移动架构视频、安卓面试真题、项目实战源码讲义

本文介绍了Android7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。
**《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》** > > **[开源分享完整内容戳这里](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)** > 首先这里要注意的是,这个xml文件,如果你只是在你的app当中有多个library module使用FileProvider适配,在不同module的AndroidManfiest.xml中配置的这个xml的文件名必须是不同的,否则会出现问题,如果是相同的名字的话最终这个文件会被合并掉,这个问题也是折腾了好久,所以一定要记得多个模块的话要起一个不同的文件名! 这个xml中可以配置的属性: * ``:内部存储空间应用私有目录下的 files/ 目录,等同于 `Context.getFilesDir()` 所获取的目录路径; * ``:内部存储空间应用私有目录下的 cache/ 目录,等同于 `Context.getCacheDir()`所获取的目录路径; * ``:外部存储空间根目录,等同于 `Environment.getExternalStorageDirectory()`所获取的目录路径; * ``:外部存储空间应用私有目录下的 files/ 目录,等同于`Context.getExternalFilesDir(null)`所获取的目录路径; * ``:外部存储空间应用私有目录下的 cache/ 目录,等同于 `Context.getExternalCacheDir()`; 其中每个属性下面可以配置 name 和 path 两个属性,name是相当于一个别名,随便起,不要重复就行,path就是在当前这个属性下面的共享目录,比如这里写的是external-path,path是·TQImageSelector/CameraImage/,那么就表示是在 `Environment.getExternalStorageDirectory().getPath()`+TQImageSelector/CameraImage/这个目录下,最终这个目录会被共享访问。如果文件是直接存放在根目录下进行共享,那么path可以写成`path="."`这样可以访问根目录下的所有文件。 代码中使用, 以启动相机拍照为例: public void startCamera() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (cameraIntent.resolveActivity(getPackageManager()) != null) { File cameraFile = FileUtils.createCameraFile(this); cameraPath = cameraFile.getAbsolutePath(); if (getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.M) { Uri imageUri = ImageSelectorProvider.getUriForFile(this, getPackageName()+".provider", cameraFile); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivityForResult(cameraIntent, REQUEST_CAMERA); } else { cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)); startActivityForResult(cameraIntent, REQUEST_CAMERA); } } } 注意这里创建了一个file,创建的这个file必须是在你前面xml文件的path中配置的目录下面,它会传递到`Provider.getUriForFile()`方法中。另外intent最好加上flg`Intent.FLAG_GRANT_READ_URI_PERMISSION`, 虽然在清单文件中也配置了。 **返回结果的获取** 如果你启动相机的时候,创建的保存文件完整路径是记住的,比如用全局变量保存,那么你可以直接在`onActivityResult`中访问这个路径,但是假如这个路径没有记住,比如启动相机录制视频我是封装到一个library库当中,文件名的创建是在library内部进行创建的,这样app在使用的时候可能拿不到这个文件名,这时可以在`onActivityResult`中去解析这个url来获取路径也是可以的。解析代码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == REQUEST_CODE_VIDEO_RECORD_SYS_CAMERA_TARGET_N) { //获取系统Camera录制的视频 Uri uri = data.getData(); if (uri != null) { //视频文件路径 String fileName = UriUtils.getFileNameByFileProviderUri(this, uri); if (!TextUtils.isEmpty(fileName)) { String videoPath = ROOT_DIR + "/" + RecordBySystemCamera.VIDEO_FILE_DIR_TARGET_N + fileName; File file = new File(videoPath); //... } } } } } 这里用到一个方法`getFileNameByFileProviderUri`, 用来从FileProvider提供的uri当中解析文件名,我们把在配置FileProvider时xml中配置的path路径在代码中写成常量,然后用这个常量路径 + 解析的文件名就是完整路径。 `getFileNameByFileProviderUri`实现代码: /** * 根据FileProvider分享的Uri获取对应的文件名 * @param context * @param uri * @return */ public static String getFileNameByFileProviderUri(Context context, Uri uri) { String name = null; try { Cursor c = context.getContentResolver().query(uri, null, null, null, null); if (null != c && c.moveToFirst()) { int nameIndex = c.getColumnIndex(OpenableColumns.DISPLAY_NAME); name = c.getString(nameIndex); c.close(); } } catch (Exception e) { e.printStackTrace(); } return name;

推荐阅读
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
诚实的愛是最棒的_977_415_874
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有