智能管家SmartButler
从PT站发现的 Android 练手小项目,慕课网上面的课程,看过视频之后感觉优点还是挺多的
- 上手简单
- 老师总结一些代码常用模板,有利于之后编程代码结构
- 这个框架虽说是 MVC ,但是对于小项目 MVC 也未尝不可,并且框架分类层次分明
- 采用许多开源框架
缺点
- 最重要的,年代稍微有些老,对于新版本(Android6.0 之后不太友好)
- 虽然采用了许多开源框架,但是对于框架本身并没有做太多的说明,只是轮子的拼接
- 部分后台接口发生改变,用不了
做了一些微小的工作
对于这个练手项目,肯定是要抱着学习的态度,但同时,还要结合现在新版本来看旧版代码的一些局限性,
自己只能做一些微小的工作
那么接下来,先从很尴尬的运行时权限说起
运行时权限
在 Android6.0 之前,安装软件时,会告诉你该软件都需要什么什么权限,但是就算软件告诉你我要你各种隐私,你装个微信还是要装对吧,所以Android6.0很机智的引入了运行时权限这个概念,有些关键性的权限,你在AndroidManifest文件里面声明了,没有用,等到用的时候你还要申请一遍,而且会直接弹出询问UI。
这个申请的操作,是留给开发者去做的。
下面来讨论运行时权限在智能管家的应用
拍照与写入内存
调用拍照代码中,我们加入版本检测,并在高版本中引入权限请求
1 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { |
在这里引入了FileProvider,我们已经在配置文件中声明了
1 | <provider |
首先,FileProvider 是什么?这个我将在后面博客详细说明,
那么为什要引入呢?
如果我知道一个文件的uri,是不是就可以随意访问了呢?如果没有FileProvider拦着你,确实是这样,但现在更严格了,Android 7.0后新增了对文件跨进程访问的限制,这个限制会造成,如果使用file://uri的方式访问,则会出现android.os.FileUriExposedException的异常。
注意,配置文件中的 "@xml/provider_paths"
,
1 |
|