-
android7.0
2017-01-06 09:33:50Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的...Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的一些心得分享给大家,让大家的应用能早一天跑在Android7.0上。
权限更改
随着Android版本越来越高,Android对隐私的保护力度也越来越大。从Android6.0引入的动态权限控制(Runtime Permissions)到Android7.0的“私有目录被限制访问”,“StrictMode API 政策”。这些更改在为用户带来更加安全的操作系统的同时也为开发者带来了一些新的任务。如何让你的APP能够适应这些改变而不是cash,是摆在每一位Android开发者身上的责任。
目录被限制访问
一直以来,在目录及文件的访问保护方面iOS做的是很到位的,如:iOS的沙箱机制。但,Android在这方面的保护就有些偏弱了,在Android中应用可以读写手机存储中任何一个目录及文件,这也带来了很多的安全问题。现在Android也在着力解决这一问题。
在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。对于这个权限的更改开发者需要留意一下改变:
- 私有文件的文件权限不在放权给所有的应用,使用 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 进行的操作将触发 SecurityException。
应对策略:这项权限的变更将意味着你无法通过File API访问手机存储上的数据了,基于File API的一些文件浏览器等也将受到很大的影响,看到这大家是不是惊呆了呢,不过迄今为止,这种限制尚不能完全执行。 应用仍可能使用原生 API 或 File API 来修改它们的私有目录权限。 但是,Android官方强烈反对放宽私有目录的权限。可以看出收起对私有文件的访问权限是Android将来发展的趋势。
- 给其他应用传递 file:// URI 类型的Uri,可能会导致接受者无法访问该路径。 因此,在Android7.0中尝试传递 file:// URI 会触发 FileUriExposedException。
应对策略:大家可以通过使用FileProvider来解决这一问题。
- DownloadManager 不再按文件名分享私人存储的文件。COLUMN_LOCAL_FILENAME在Android7.0中被标记为
deprecated
,
旧版应用在访问 COLUMN_LOCAL_FILENAME时可能出现无法访问的路径。 面向 Android N 或更高版本的应用在尝试访问 COLUMN_LOCAL_FILENAME 时会触发 SecurityException。
应对策略:大家可以通过ContentResolver.openFileDescriptor()来访问由 DownloadManager 公开的文件。
应用间共享文件
在Android7.0系统上,Android 框架强制执行了 StrictMode API 政策禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常,如调用系统相机拍照,或裁切照片。
应对策略:若要在应用间共享文件,可以发送 content:// URI类型的Uri,并授予 URI 临时访问权限。 进行此授权的最简单方式是使用 FileProvider类。 如需有关权限和共享文件的更多信息,请参阅共享文件。
在Android7.0上调用系统相机拍照,裁切照片
调用系统相机拍照
在Android7.0之前,如果你想调用系统相机拍照可以通过以下代码来进行:
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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在Android7.0上使用上述方式调用系统相拍照会抛出如下异常:
android.os.FileUriExposedException: file:storage/emulated/0/temp/1474956193735.jpg exposed beyond app through Intent.getData() at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799) at android.net.Uri.checkFileUriExposed(Uri.java:2346) at android.content.Intent.prepareToLeaveProcess(Intent.java:8933) at android.content.Intent.prepareToLeaveProcess(Intent.java:8894) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517) at android.app.Activity.startActivityForResult(Activity.java:4223) ... at android.app.Activity.startActivityForResult(Activity.java:4182)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
这是由于Android7.0执行了“StrictMode API 政策禁”的原因,不过小伙伴们不用担心,上文讲到了可以用FileProvider来解决这一问题,
现在我们就来一步一步的解决这个问题。使用FileProvider
使用FileProvider的大致步骤如下:
第一步:在manifest清单文件中注册provider<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.jph.takephoto.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
心得:exported:要求必须为false,为true则会报安全异常。grantUriPermissions:true,表示授予 URI 临时访问权限。
第二步:指定共享的目录
为了指定共享的目录我们需要在资源(res)目录下创建一个xml目录,然后创建一个名为“file_paths”(名字可以随便起,只要和在manifest注册的provider所引用的resource保持一致即可)的资源文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <paths> <external-path path="" name="camera_photos" /> </paths> </resources>
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 代表的根目录: Context.getFilesDir()
- 代表的根目录: Environment.getExternalStorageDirectory()
- 代表的根目录: getCacheDir()
心得:上述代码中
path=""
,是有特殊意义的,它代码根目录,也就是说你可以向其它的应用共享根目录及其子目录下任何一个文件了,如果你将path设为path="pictures"
,
那么它代表着根目录下的pictures目录(eg:/storage/emulated/0/pictures),如果你向其它应用分享pictures目录范围之外的文件是不行的。第三步:使用FileProvider
上述准备工作做完之后,现在我们就可以使用FileProvider了。
还是以调用系统相机拍照为例,我们需要将上述拍照代码修改为如下: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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
上述代码中主要有两处改变:
1. 将之前Uri的scheme类型为file的Uri改成了有FileProvider创建一个content类型的Uri。
2. 添加了intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
来对目标应用临时授权该Uri所代表的文件。心得:上述代码通过
FileProvider
的Uri getUriForFile (Context context, String authority, File file)
静态方法来获取Uri,该方法中authority
参数就是清单文件中注册provider的android:authorities="com.jph.takephoto.fileprovider"
。
对Web服务器如tomcat,IIS比较熟悉的小伙伴,都只知道为了网站内容的安全和高效,Web服务器都支持为网站内容设置一个虚拟目录,其实FileProvider
也有异曲同工之处。将
getUriForFile
方法获取的Uri打印出来如下:content://com.jph.takephoto.fileprovider/camera_photos/temp/1474960080319.jpg`。
- 1
- 1
其中
camera_photos
就是file_paths.xml
中paths的name。因为上述指定的path为
path=""
,所以content://com.jph.takephoto.fileprovider/camera_photos/
代表的真实路径就是根目录,即:/storage/emulated/0/
。content://com.jph.takephoto.fileprovider/camera_photos/temp/1474960080319.jpg
代表的真实路径是:/storage/emulated/0/temp/1474960080319.jpg
。另外,推荐大家使用开源工具库TakePhoto,
TakePhoto是一款在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。裁切照片
在Android7.0之前,你可以通过如下方法来裁切照片:
File file=new File(Environment.getExternalStorageDirectory(), "/temp/"+System.currentTimeMillis() + ".jpg"); if (!file.getParentFile().exists())file.getParentFile().mkdirs(); Uri outputUri = Uri.fromFile(file); Uri imageUri=Uri.fromFile(new File("/storage/emulated/0/temp/1474960080319.jpg")); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(imageUri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent,1008);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
和拍照一样,上述代码在Android7.0上同样会引起
android.os.FileUriExposedException
异常,解决办法就是上文说说的使用FileProvider。然后,将上述代码改为如下即可:
File file=new File(Environment.getExternalStorageDirectory(), "/temp/"+System.currentTimeMillis() + ".jpg"); if (!file.getParentFile().exists())file.getParentFile().mkdirs(); Uri outputUri = FileProvider.getUriForFile(context, "com.jph.takephoto.fileprovider",file); Uri imageUri=FileProvider.getUriForFile(context, "com.jph.takephoto.fileprovider", new File("/storage/emulated/0/temp/1474960080319.jpg");//通过FileProvider创建一个content类型的Uri Intent intent = new Intent("com.android.camera.action.CROP"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(imageUri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent,1008);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
另外,裁切照片推荐大家使用开源工具库TakePhoto,
TakePhoto是一款在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。电池和内存
Android 6.0(API 级别 23)引入了低电耗模式,Android7.0在电池和内存上又做了进一步优化,
来减少Android应用对电量的消耗以及对内存的占用。这些优化所带来的一些规则的变更可能会影响你的应用访问系统资源,以及你的系统通过特定隐式 Intent 与其他应用互动的方式。
所以开发人员需要特别注意这些改变。低电耗模式
在低电耗模式下,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。
Android7.0通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式。也就是说,Android7.0会在手机屏幕关闭的状态下,限时应用对CPU以及网络的使用。
具体规则如下:
- 当设备处于充电状态且屏幕已关闭一定时间后,设备会进入低电耗模式并应用第一部分限制: 关闭应用网络访问、推迟作业和同步。
- 如果进入低电耗模式后设备处于静止状态达到一定时间,系统则会对 PowerManager.WakeLock、AlarmManager
闹铃、GPS 和 Wi-Fi 扫描应用余下的低电耗模式限制。 无论是应用部分还是全部低电耗模式限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。
后台优化
小伙伴们都知道在Android中有一些隐式广播,使用这些隐式广播可以做一些特定的功能,如,当手机网络变成WiFi时自动下载更新包等。
但,这些隐式广播会在后台频繁启动已注册侦听这些广播的应用,从而带来很大的电量消耗,为缓解这一问题来提升设备性能和用户体验,在Android 7.0中删除了三项隐式广播,以帮助优化内存使用和电量消耗。Android 7.0 应用了以下优化措施:
- 在 Android 7.0上 应用不会收到
CONNECTIVITY_ACTION
广播,即使你在manifest清单文件中设置了请求接受这些事件的通知。 但,在前台运行的应用如果使用BroadcastReceiver 请求接收通知,则仍可以在主线程中侦听 CONNECTIVITY_CHANGE。 - 在 Android 7.0上应用无法发送或接收
ACTION_NEW_PICTURE
或ACTION_NEW_VIDEO
类型的广播。
应对策略:Android 框架提供多个解决方案来缓解对这些隐式广播的需求。 例如,JobScheduler API
提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。 您甚至可以使用 JobScheduler API 来适应内容提供程序变化。另外,大家如果想了解更多关于后台的优化可查阅后台优化。
移动设备会经历频繁的连接变更,例如在 Wi-Fi 和移动数据之间切换时。 目前,可以通过在应用清单中注册一个接收器来侦听隐式
CONNECTIVITY_ACTION
广播,
让应用能够监控这些变更。 由于很多应用会注册接收此广播,因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。以上是,我在Android7.0上适配上的一些心得,小伙伴们如果有遇到问题可以在下方留言。
最后
既然来了,留下个喜欢再走吧,鼓励我继续创作(^_^)∠※
如果喜欢我的文章,那就关注我的博客吧,让我们一起做朋友~~
戳这里,加关注哦:
-
Android 7.0
2017-07-03 18:09:03Android7.0将靠这六个优点”完爆”iOS10 Android 7.0 行为变更 通过FileProvider在应用间共享文件吧 了解与建设有中国特色的Android M&amp;N Android 7.0动态权限大总结 Android 7.0脱坑指南 标题将会带来更...Android 7.0
简介
2016年8月22日,推出Android 7.0。
新特性
- 多窗口模式
- Data Saver
- 改进的Java 8 语言支持
- 自定义壁纸
- 快速回复
- Daydream VR 支持
- 后台省电
- 快速设置
- Unicode 9支持和全新的emoji表情
- Google Assistant
标题
- 修复卡顿问题
- Android7.0将靠这六个优点”完爆”iOS10
- Android 7.0 行为变更 通过FileProvider在应用间共享文件吧
- 了解与建设有中国特色的Android M&N
- Android 7.0动态权限大总结
- Android 7.0脱坑指南
通知
7.0以上要设置,nitification是不是没设置channel。要不然会报红色。
On Android 8.1 API 27 notification does not display
多窗口模式
禁用多窗口模式即可。
标题
将会带来更强的性能
图形工具Vulkan/JIT编译器
更好的体验
快速清除和切换任务/快速清除和处理通知/全新的Emoji
更多的功能
多屏显示/画中画模式更安全的机制
全新的文件加密模式使用FileProvider机制进行Uri封装。原有直接使用本地真实路径的Uri被认为是不安全的,会抛出FileUriExposeException异常。而FileProvider则是一种特殊的内容提供器,它使用了和内容提供器类似的机制来对数据进行保护,可以选择性地将封装过的Uri共享给外部,提高应用的安全性。
-
android 7.0
2017-08-17 17:34:04android 7.0对开发者会有哪些影响 http://blog.csdn.net/jiabailong/article/details/52411353 android 7.0 多窗口及新特性demo http://blog.csdn.net/jiabailong/article/details/52411378android 7.0对开发者会有哪些影响
http://blog.csdn.net/jiabailong/article/details/52411353
android 7.0 多窗口及新特性demo
http://blog.csdn.net/jiabailong/article/details/52411378
-
android7.0源码
2017-10-10 20:37:13android7.0源码供大家学习使用交流。android7.0源码供大家学习使用交流。android7.0源码供大家学习使用交流。android7.0源码供大家学习使用交流。 -
Android 7.0新特性,深入了解Android7.0
2017-03-22 22:31:322016年8月22日,谷歌正式推送Android 7.0 Nougat(牛轧糖)正式版,首发推送了多款Nexus设备。除了修复常规BUG,Android 7.0还新增了分屏、新的Notification、VR支持等新特性。8月22日,谷歌正式推送Android 7.0 ...深度了解Android 7.0 ,你准备好了吗?
导语
2016年8月22日,谷歌正式推送Android 7.0 Nougat(牛轧糖)正式版,首发推送了多款Nexus设备。除了修复常规BUG,Android 7.0还新增了分屏、新的Notification、VR支持等新特性。
8月22日,谷歌正式推送Android 7.0 Nougat(牛轧糖)正式版,首发推送了多款Nexus设备。除了修复常规BUG,Android 7.0还新增了分屏、新的Notification、VR支持等新特性。
8月22日,谷歌正式推送Android 7.0 Nougat(牛轧糖)正式版,他们还会三个月一次推送开发版,而曝光的消息看,第一个开发版就是Android 7.1,Android N主要新增了以下的新特性和优化。
一、新的Notification
Android N 增加了许多新的notifications API,进行了重新的设计,引入了新的风格。
● 模板更新:开发者将能够充分利用新模板,只需进行少量的代码调整。● 消息样式自定义:可以自定义更多与使用MessageStyle类的通知相关的用户界面标签。可以配置消息、会话标题和内容视图。
● 捆绑通知:系统可以将消息组合在一起(例如,按消息主题)并显示组。用户可以适当地进行 Dismiss 或 Archive 等操作。
● 直接回复:对于实时通信应用,Android 系统支持内联回复,以便用户可以直接在通知界面中快速回复短信。
● 自定义视图:两个新的 API ,在通知中使用自定义视图时可以充分利用系统装饰元素,如通知标题和操作。
图片描述二、多窗口支持(分屏模式)
运行 Android N 的手机和平板电脑上,用户可以并排运行两个应用,或者处于分屏模式时一个应用位于另一个应用之上。用户可以通过拖动两个应用之间的分隔线来调整应用。在Android TV 设备上,应用可以将自身置于画中画模式,从而让它们可以在用户浏览或与其他应用交互时继续显示内容。
图片描述三、Quick Settings Tile API
“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。在 Android N中,已扩展“快速设置”的范围,使其更加有用更方便。为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。 还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。
对于开发者,Android N 还添加了一个新的 API,从而可以定义自己的“快速设置”图块,使用户可以轻松访问应用中的关键控件和操作。
图片描述四、快速的应用安装路径
Android 运行组件的 JIT 编译器最实际的好处之一是应用安装和系统更新的速度。即使在Android 6.0 中需要几分钟进行优化和安装的大型应用,现在只需几秒钟就可以完成安装。系统更新也变得更快,因为省去了优化步骤。
五、随时随地低电耗模式
在 Android N 中,低电耗模式又前进了一步,随时随地可以省电。只要屏幕关闭了一段时间,且设备未插入电源,低电耗模式就会对应用使用熟悉的 CPU 和网络限制。这意味着用户即使将设备放入口袋里也可以省电。
六、Project Svelte:后台优化
Project Svelte在持续改善,以最大程度减少生态系统中一系列 Android 设备中系统和应用使用的 RAM。在 Android N 中,Project Svelte 注重优化在后台中运行应用的方式。
后台处理是大多数应用的一个重要部分。处理得当,可实现非常棒的用户体验—即时、快速和情境感知。如果处理不得当,后台处理会毫无必要地消耗 RAM和电池,同时影响其他应用的系统性能。
Android N 删除了三项隐式广播(CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和ACTION_NEW_VIDEO),以帮助优化内存使用和电量消耗。此项变更很有必要,因为隐式广播会在后台频繁启动已注册侦听这些广播的应用,删除这些广播可以显著提升设备性能和用户体验。
因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。同理,应用可以注册接收来自其他应用(例如相机)的隐式ACTION_NEW_PICTURE 和ACTION_NEW_VIDEO 广播。
当用户使用相机应用拍摄照片时,这些应用即会被唤醒处理广播。为减缓这些问题,Android N应用了以下优化措施:
1、面向 Android N 开发的应用不会收到 CONNECTIVITY_ACTION 广播,即使它们已有清单条目来请求接受这些事件的通知。在前台运行的应用如果使用BroadcastReceiver请求接收通知,则仍可以在主线程中侦听CONNECTIVITY_CHANGE。
2、 应用无法发送或接收 ACTION_NEW_PICTURE 和ACTION_NEW_VIDEO广播。此项优化会影响所有应用,而不仅仅是面向 Android N 的应用。
未来的 Android 版本还可能会弃用其他隐式广播以及未绑定的后台服务。有鉴于此,应避免依赖在清单文件中声明的接收器来侦听隐式广播或删除此依赖关系,以及避免或删除对后台服务的依赖关系。
Android 框架提供多种解决方案来降低这些隐式广播或后台服务的必要性。例如,JobScheduler API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入不按流量计费的网络)时所执行的网络操作。甚至可以使用JobScheduler来响应内容提供程序所发生的变更。
七、Data Saver
在移动设备的整个生命周期,蜂窝数据计划的成本通常会超出设备本身的成本。对于许多用户而言,蜂窝数据是他们想要节省的昂贵资源。
Android N推出了Data Saver模式,这是一项新的系统服务,有助于减少应用使用的蜂窝数据,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。 Data Saver让用户可以控制应用使用蜂窝数据的方式,同时让开发者打开Data Saver时可以提供更多有效的服务。
图片描述八、Vulkan API
Android N 将一项新的 3D 渲染 API Vulkan™ 集成到平台中。就像 OpenGL™ ES 一样,Vulkan是 3D 图形和渲染的一项开放标准,由Khronos Group 维护。
Vulkan是完全从零开始设计,以最小化驱动器中的 CPU 开销,并能让应用更直接地控制 GPU 操作。Vulkan还允许多个线程同时执行工作,如命令缓冲区构建,以获得更好的并行化。
Vulkan开发工具和库都已卷入Android NDK。它们包括:
● 头
● 验证层(调试库)
● SPIR-V 着色程序编译器
● SPIR-V 运行时着色器编译库
● Vulkan仅适用于已启用Vulkan硬件的设备上的应用,如 Nexus 5X、Nexus 6P 和Nexus Player。
九、号码屏蔽
Android N 现在支持在平台中进行号码屏蔽,提供框架 API,让服务提供商可以维护屏蔽的号码列表。默认短信应用、默认手机应用和提供商应用可以对屏蔽的号码列表进行读取和写入操作,其他应用则无法访问此列表。
十、来电过滤
Android N 允许默认的手机应用过滤来电。手机应用执行此操作的方式
是实现新的CallScreeningService,该方法允许手机应用基于来电的
Call.Details执行大量操作,例如:
● 拒绝来电
● 不允许来电到达通话记录
● 不向用户显示来电通知
十一、多区域设置支持、多语言
Android N 现在允许用户在设置中选择多个区域设置,以更好地支持双语用例。应用可以使用新的 API 获取用户选择的区域设置,然后为多区域设置用户提供更成熟的用户体验,如以多个语言显示搜索结果,并且不会以用户了解的语言翻译网页。
除多区域设置支持外,Android N 还扩展了用户可用的语言范围。它针对常用语言提供超过 25种的变体,如英语、西班牙语、法语和阿拉伯语。它还针对 100 多种新语言添加了部分支持。
应用可以通过调用 LocaleList.GetDefault() 获取用户设置的区域设置列表。 为支持扩展的区域设置数量,Android N 正在改变其解析资源的方式。
十二、新增的表情符号
Android N引入更多表情符号和表情符号相关功能,包括肤色表情符号和支持变量选择符。如果应用支持表情符号,请遵循以下准则,以便能充分利用这些表情符号相关功能优势。
● 在插入之前,检查设备是否包含表情符号。若要检查系统字体中有哪些表情符号,使用hasGlyph(String) 方法。
● 检查表情符号是否支持变量选择符。变量选择符能够呈现一些彩色或黑白的表情符号。在移动设备上,应用应呈现彩色的表情符号,而不是黑白的。但是,如果应用显示嵌入在文本中的表情符号,那应使用黑白变量。若要确定表情符号是否有变量,使用变量选择符。如需有关支持变量的字符的完整清单,请参阅变量的 Unicode 文档中的表情符号变量序列部分。
● 检查表情符号是否支持肤色。Android N允许用户按照他们的喜好修改表情符号呈现的肤色。键盘应用应为有多个肤色的表情符号提供可视化的指示,并应允许用户选择他们喜欢的肤色。若要确定哪些系统表情符号有肤色修改器,使用hasGlyph(String) 方法。可以通过读取Unicode 文档来确定哪些表情符号使用肤色。
十三、Android 中的 ICU4J API
ICU4J 是一个广泛使用的开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。Android N 在android.icu软件包下显示 Android 框架中的 ICU4J API 子集,供应用开发者使用。迁移很简单,主要是需要从com.java.icu命名空间更改为android.icu。如果已在应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供的android.icu API 可以大量节省 APK 大小。
十四、OpenGL™ ES 3.2 API
Android N 添加了框架接口和对 OpenGL ES 3.2 的平台支持,包括:
● 来自 Android 扩展包 (AEP) 的所有扩展(EXT_texture_sRGB_decode除外)。
● 针对 HDR 的浮点帧缓冲和延迟着色。
● BaseVertex绘图调用可实现更好的批处理和流媒体服务。
● 强大的缓冲区访问控制可减少WebGL开销。
十五、VR 支持(面向Android的 Google VR SDK)
图片描述
Android N 添加了新的VR 模式的平台支持和优化,以使开发者能为用户打造高质量移动 VR体验。新版针对开发者提供了大量性能增强特性,包括单一缓冲区渲染以及允许 VR 应用访问某个专属的CPU 核心。在应用中,可以享受到专为 VR 设计的平滑头部跟踪和立体声通知功能。
十六、无障碍增强功能(API参考 android.accessibilityservice.GestureDescription)
Android N 现在针对新的设备设置直接在欢迎屏幕上提供“Vision Settings”。这使用户可以更容易发现和配置他们设备上的无障碍功能,包括放大手势、字体大小、显示屏尺寸和TalkBack。
十七、密钥认证
使用硬件支持的密钥库,可更安全地在 Android 设备上创建、存储和使用加密密钥。它们可保护密钥免受 Linux 内核、潜在的 Android 漏洞的攻击,也可防止从已取得根权限的设备提取密钥。
为了让硬件支持的密钥库使用起来更简单和更安全,Android N 引入了密钥认证。应用和关闭的设备可使用密钥认证以坚决地确定 RSA 或 EC 密钥对是否受硬件支持、密钥对的属性如何,以及其使用和有效性有何限制。
应用和关闭的设备服务可以通过 X.509 认证证书(必须由有效的认证密钥签署)请求有关密钥对的信息。认证密钥是一个 ECDSA 签署密钥,其在出厂时被注入设备的硬件支持的密钥库。因此,有效的认证密钥签署的认证证书可确认硬件支持的密钥库是否存在,以及该密钥库中密钥对的详细信息。
为确保设备使用安全的官方 Android 出厂映像,密钥认证要求设备 bootloader向可信执行环境(TEE)提供以下信息:
设备上安装的操作系统版本和补丁级别● 验证的启动公钥和锁定状态。
● 除密钥认证外,Android N 还推出了指纹绑定密钥,在指纹注册时不会撤销。
另外新增特性还有直接启动、打印服务增强、持续性能 API、作用域目录访问、键盘快捷键辅助工具等。
作者:Redyan, 腾讯移动客户端开发工程师
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。
原文链接:http://wetest.qq.com/lab/view/288.html -
Android7.0关于PopWindow的问题Android7.0 PopupWindow的兼容问题 Android7.0 中对 PopupWindow 这个...
2017-04-10 12:05:19Android7.0 PopupWindow的兼容问题 Android7.0 中对 PopupWindow 这个常用的控件又做了一些改动,修复了以前遗留的一些问题的同时貌似又引入了一些问题,本文通过在7.0设备上实测并且结合源码分析,带你... -
Android7.0适配:关于Android 7.0 在应用间共享文件的适配
2018-11-17 13:56:25从Android6.0动态权限控制(Runtime Permissions)到Android7.0私有目录限访、StrictMode API政策等的更改,这些更改在为用户带来更加安全的操作系统的同时也为开发者做应用适配带来了一些新的任务,所以我们有必要... -
Android7.0适配
2017-02-25 15:53:54本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布转载请注明出处:http://blog.csdn.net/chay_chan/article/details/57083383关于Android7.0的适配 最近在软件的维护和更新过程中,了解到一些关于Android... -
Android 7.0源码
2016-09-20 10:20:26Android 7.0 SDK 源码 -
Android 7.0行为变更 FileUriExposedException解决方法
2021-01-05 16:30:15当我们开发关于【在应用间共享文件】相关功能的时候,在Android 7.0上经常会报出此运行时异常,那么Android 7.0以下没问题的代码,为什么跑到Android 7.0+的设备上运行就出问题了呢?,这主要来自于Android 7.0的一... -
Android 7.0 Nougat
2019-05-30 19:23:37Android 7.0 开发者版本 Android 7.0 Nougat 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。 请务必查阅Android 7.0 行为变更以了解平台变更可能影响您的应用的领域。 要详细了解 Android 7.0 ... -
Android7.0拍照截图
2018-11-07 10:57:20Android7.0拍照、相册 然后截图 -
Android N/Android 7.0新特性(图文详解Android 7.0新功能)
2016-08-31 22:51:27在2016年8月22日,谷歌正式推送Android 7.0 Nougat正式版。Android的版本推送真是快啊!6.0还没完全推广,7.0已经推送了。作为开发者不努力真的跟不上节奏了。那么,我先细说下7.0的哪些新特性。 多窗口支持 在 ... -
Android7.0支持exfat
2019-01-30 13:55:44此资源为Android 7.0支持exfat文件系统移植补丁,已在mtk平台7.0系统验证通过,可以使用。 -
Android-Android7.0及以下版本调用系统相机和相册
2019-08-13 05:15:36Android7.0及以下版本调用系统相机和相册。Android7.0拍照,动态权限的获取 -
详解Android 7.0 Settings 加载选项
2020-08-31 10:24:10本篇文章主要介绍了Android 7.0 Settings 加载选项,Android 7.0 Settings顶部多了一个建议选项,多了个侧边栏,操作更加便捷了,有兴趣的可以了解一下。 -
Android App 版本更新完美适配7.0、8.0, 兼容Android7.0 8.0
2019-09-17 21:54:41Android App 版本更新完美适配7.0、8.0 兼容Android7.0 兼容Android8.0 -
android 7.0适配
2017-10-23 14:52:15Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的... -
Android 应用适配 Android 7.0 权限要求详解
2020-08-27 02:24:44今天小编就为大家分享一篇Android 应用适配 Android 7.0 权限要求详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Android-Android实现微信webview兼容Android7.0
2019-08-13 04:21:12Android实现微信webview兼容Android 7.0。自带库文件不使用系统的可以全方位兼容各机型,实现二次封装 -
Android 7.0开发获取存储设备信息的方法
2021-01-05 19:03:15Android 7.0开发相较之前有不少改进,具体可参考前面的文章Android7.0版本影响开发的改进分析,这里简单总结一下Android 7.0针对存储设备的简单操作方法。 MountPoint 我们通过MountPoint来描述android设备信息 ... -
android 7.0 SystemUI
2017-11-08 11:43:42android 7.0 SystemUI 源代码。位置frameworks\base\packages目录。 -
Android 海康最新视频播放库,支持Android 6.0 和 Android 7.0
2017-05-20 18:03:02Android 海康最新视频播放库,支持Android 6.0 和 Android 7.0 ,里面有Android studio 2.4 的demo源码,在android 7.0 上可以完美运行。 -
Android7.0(Android N)适配教程,心得
2016-09-28 10:19:58Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的... -
Android 7.0特性
2017-05-03 16:22:04详情参考:...Android 7.0 开发者版本 Android 7.0 Nougat 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。 请务必查阅 Android 7.0 行为变更以了解平台变更可能影 -
Android7.0 MessageQueue详解
2020-09-01 14:28:25主要为大家详细介绍了Android7.0 MessageQueue的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Android 7.0相机源码
2017-07-23 13:04:45从android7.0源码中提取出来的相机源码,经过修改和优化,可在eclipse、adt中编译通过,可以在android4.4及以上版本系统运行 -
android7.0适配
2016-12-14 13:47:19Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的... -
Android 7.0新特性详解
2020-08-30 23:33:20本篇文章主要介绍了Android 7.0(牛轧糖)新特性的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧