您的位置:首页 > 移动开发 > Android开发

Android 5.0 6.0 以及7.0新特性 MD风格 敏感权限 文件访问

2017-04-19 19:05 656 查看
Android 3.0API中主要特性:

3.0中Fragments 碎片容器

3.0中Android再次增强动画播放类,ObjectAnimator

Android4.0新特性:

改进WebView,更好的支持html5CSS3以及JavaScript,支持使用Chrome开发工具远程调式移动设备中WebView
的内容;

Android5.0新特性:

代表手机:三星S6

1.代号为Lollipop(棒棒糖),采用了Google最新推行的Material Design设计语言,用户切换activity时,有无缝的过度位移动画.

Material Design使用:

设置应用的 targetSdkVersion 和 targetSdkVersion 为21

在values目录下的style资源文件中创建一个style,让其继承自 android:Theme.Material

在AndroidManifest中指定应用的主题或者Activity的主题为我们设定的样式

谷歌官方我们提供了三种配色风格的Material Design样式:

 

黑色主题 Theme.Material

明亮主题 Theme.Material.Light

明亮主题黑色ActionBar Theme.Material.Light.DarkActionBar

7大控件的修改和新增:

1).RecyclerView的使用

2).动态替换Theme    让Activity使用自定义的Theme。


3. View的高度与阴影  View新增属性z轴


4).Palette的使用,可以让我们从一张图片中拾取颜色,将拾取到的颜色赋予ActionBar,StatusBar以及背景色可以让界面色调实现统一

5). 水波纹动画,自定义水波纹动画以及状态选择器动画
6).CardLayout拥有高度和阴影,以及轮廓裁剪,圆角等功能替代RoundImageView
7).ToolBar的使用 它用来代替ActionBar,但是比ActionBar更加灵活

总结:可以修改状态栏颜色,新的样式!这套设计图对 Android 系统的桌面图标及部件的透明度进行的稍稍的调整,并且各种桌面小部件也可以重叠摆放。虽然调整桌面部件透明度对 Android 系统来说并不算什么新鲜的功能,但是加入了透明度的改进。
界面加入了五彩缤纷的颜色、流畅的动画效果,呈现出一种清新的风格。

2.Notifications通知详情可以由用户自己设计.用户在浏览某个app时,可以在当前app上浮动一个窗口来显示关键的通知信息.在锁屏界面也可以直接查看通知消息了,用户还可以直接在锁屏的界面进行消息回复或查看.

Android 6.0 新特性:

代表手机:小米4

1.运行时权限,用户可以在已安装的app上立刻同意或者拒绝权限.

自从升级到Android M以来,最大的改变就是增加了运行时权限Runtime Permission,6.0以上的系统如果没有做适配,运行了targetSDK=23的App时就会报权限错误;当然如果你还没准备好适配权限,把targetSDK设置成小于23就ok了,不过适配是迟早的。




因为之前说到"不给基础权限就不让使用"。我这里所说的基础权限是相对于App而言的,比如: 微信的基础权限是[位置]和[电话状态],在启动微信的时候会看到这两个权限的授权,只要任一一个不通过就无法进入微信,这样的处理是比较合理的,如果要在代码中去适配这两个权限的话,估计要改动的地方非常大。

目前主流App的处理方式是在获取权限之前给用户一个友好的提示:

2.Apache
HTTP客户端删除


 
        Android 6.0版本将支持Apache HTTP客户端。如果你的应用程序使用此客户端和目标Android 2.3(API级别9)或更高,使用HttpURLConnection类。
 
这个API是更有效的,因为它通过透明的压缩和响应缓存,减少网络使用和减少能耗。继续使用Apache HTTP api,你必须首先声明以下编译时依赖项。gradle文件:
 
android {
           useLibrary 'org.apache.http.legacy'


           }

3.Notifications

 
    这个版本删除Notification.setLatestEventInfo()方法。使用通知。构建器类来构建通知。反复更新通知,通知重用。构建器实例。调用build()方法来获取更新通知实例。
       亚行壳dumpsys通知命令不再打印出你的通知文本。使用亚行壳dumpsys通知——noredact命令而不是打印的文本通知对象。


4.TextInputLayout的使用
高级炫酷带有提示的输入框,相当于输入框中的战斗框

Android 7.0新特性:
代表手机:华为Mate9
目录被限制访问

在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。对于这个权限的更改开发者需要留意一下改变:

私有文件的文件权限不在放权给所有的应用,使用MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 进行的操作将触发
SecurityException。


应用间共享文件

在Android7.0系统上,Android 框架强制执行了 StrictMode API 政策禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常,如调用系统相机拍照,或裁切照片。

应对策略:若要在应用间共享文件,可以发送 content:// URI类型的Uri,并授予 URI 临时访问权限。 进行此授权的最简单方式是使用 FileProvider类。 如需有关权限和共享文件的更多信息,请参阅共享文件。


在Android7.0上调用系统相机拍照,裁切照片


调用系统相机拍照

这是由于Android7.0执行了“StrictMode API 政策禁”的原因,不过小伙伴们不用担心,上文讲到了可以用FileProvider来解决这一问题,
现在我们就来一步一步的解决这个问题。

以前:

File file=new File(Environment.getExternalStorageDirectory(), "/temp/"+System.currentTimeMillis() + ".jpg");
if (!file.getParentFile().exists())file.getParentFile().mkdirs();
Uri imageUri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//将拍取的照片保存到指定URI
startActivityForResult(intent,1006);

现在:

File file=new File(Environment.getExternalStorageDirectory(), "/temp/"+System.currentTimeMillis() + ".jpg");
if (!file.getParentFile().exists())file.getParentFile().mkdirs();
Uri imageUri = FileProvider.getUriForFile(context, "com.jph.takephoto.fileprovider", file);//通过FileProvider创建一个content类型的Uri
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//将拍取的照片保存到指定URI
startActivityForResult(intent,1006);


将之前Uri的scheme类型为file的Uri改成了有FileProvider创建一个content类型的Uri。
添加了
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
来对目标应用临时授权该Uri所代表的文件。


后台优化

小伙伴们都知道在Android中有一些隐式广播,使用这些隐式广播可以做一些特定的功能,如,当手机网络变成WiFi时自动下载更新包等。 但,这些隐式广播会在后台频繁启动已注册侦听这些广播的应用,从而带来很大的电量消耗,为缓解这一问题来提升设备性能和用户体验,在Android
7.0中删除了三项隐式广播,以帮助优化内存使用和电量消耗。


电池和内存

Android 6.0(API 级别 23)引入了低电耗模式,Android7.0在电池和内存上又做了进一步优化, 来减少Android应用对电量的消耗以及对内存的占用。这些优化所带来的一些规则的变更可能会影响你的应用访问系统资源,以及你的系统通过特定隐式 Intent 与其他应用互动的方式。 所以开发人员需要特别注意这些改变。




低电耗模式

在低电耗模式下,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。 Android7.0通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式。

也就是说,Android7.0会在手机屏幕关闭的状态下,限时应用对CPU以及网络的使用。

1.分屏多任务支持
现在,用户可以一次在屏幕上打开两个应用。

3.通知栏快速回复

4.快速的应用安装路径

Android 运行组件的 JIT 编译器最实际的好处之一是应用安装和系统更新的速度。 即使在 Android 6.0 中需要几分钟进行优化和安装的大型应用,现在只需几秒钟就可以完成安装。 系统更新也变得更快,因为省去了优化步骤。

2016年最新的一些技术

1.ConstraintLayout完全解析

2.MVVP

3.SVG布局

5.0和6.0和7.0的新特性

http://blog.csdn.net/tianzhu2725/article/details/52775285

http://open.le.com/guide/?page_id=2400

http://www.jianshu.com/p/56b9fb319310


面试题:Android N的源代码,如何实现应用内多语言切换?

@Override
    public Resources getResources() {
        Resources res = super.getResources();
        Configuration config = new Configuration();
        config.setToDefaults();
        res.updateConfiguration(config, res.getDisplayMetrics());
        return res;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: