Android 8.0 Oreo 新特性:
1.自动填充功能 API
其实就是EditText自动记住用户名密码功能,需要用户登录google帐号,并允许自动记录自动填充功能。
打开服务的方式 Settings > System > Languages & input > Advanced > Input assistance > Autofill service.
并且自填充功能也需要设置一个密码,当输入框第一次获取焦点时,会弹出一个小窗口是否自填充,如果有自填充记录,会先让用户输入这个密码,然后就会自动填充对应的用户名和密码。
也可以长按编辑框弹出的小窗口里点击更多,也有自动填充选项。
直接在EditText加一个参数 android:autofillHints=”username” 或 android:autofillHints=”password”即可快速应用。
Demo
调查一下有没有简单的方式
没有简单的方式,但是设置服务只需设置一次。使用自填充服务时没有省略密码的途径。
已尝试换了一个新的包名,当作令一个新服务。设置里面服务是单选框,只能选择一个服务。这个服务相当于是系统的一套服务,可以给所有带autofillHints标签的EditText通用。
代码已验证 :不同包名的应用,只要android:autofillHints标签一直,可以通用一套历史数据。
标签不同提示的用户内容也不同。
不同标签的EditText第一次输入新账户时,会提示是否保存到自填充服务中。
2.画中画功能 API
其实国内好多应用都支持这个功能了,现在google是集成到系统层。
类似微信悬浮窗口视频功能。可以在播放视频时使用
使用方法:
先在Manifest里声明当前Activity支持画中画
<activity android:name="VideoActivity"
android:supportsPictureInPicture="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
...
/>
切换方式:
//切换到画中画模式,由 args 指定纵横比和其他配置设置
Activity.enterPictureInPictureMode(PictureInPictureParams args)
在Activity切换到画中画模式时,系统会认为Activity处于暂停状态,并调用Activity的onPause()方法。
所以应该在onPause()方法中处理一下,让视频继续播放。在Activity的onPause()方法中检查画中画,并对播放做相应处理。
例如:
@Override
public void onPause() {
// If called while in PIP mode, do not pause playback
if (isInPictureInPictureMode()) {
// Continue playback
...
}
}
因为画中画界面很小,所以在Activity进入画中画模式时,Activity应仅显示视频播放,隐藏掉一些不必要的UI元素
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
if (isInPictureInPictureMode) {
//处理UI界面,隐藏掉控制按钮等,只留下视频播放窗口
} else {
//恢复UI界面,启用控制按钮视频详情等UI元素
}
}
同一个应用里是否支持画中画
已验证,可以在同一个应用中,支持画中画,点击画中画模式后,背景界面会返回上一个Activity。
已验证,系统不支持同时开启多个小窗口,系统只显示最后一个,不论这两个小窗口是不是同一个app的。
3.通知 API
Notification Dots:有新消息时,图标右上角会有小圆圈。并且长按图标,也会显示通知详情。
设置颜色,方便凸显自己应用的通知。
Notification.Builder.setColor()
设置通知超时,如果一个通知显示过长时间用户没有处理,可以自动消失。
Notification.Builder.setTimeoutAfter()
休眠:系统新功能。在通知处横滑,有选择休眠一小时的功能。
通知清除:系统现在可区分通知是由用户清除,还是由应用移除。要查看清除通知的方式,应实现 NotificationListenerService 类的新 onNotificationRemoved() 函数。
发送的消息不仅可以通过id区分,还可以通过自定义类别区分
新的特性看在demo中查看:
调起系统设置界面
Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
i.putExtra(Settings.EXTRA_CHANNEL_ID, channel);//自定义的通知类型,可以不传递此参数
startActivity(i);
如果不传参数,会不会默认一类
调起设置界面可以不传通知类型参数。
老式的用法是NotificationCompat.Builder,此用法不需要传递通知类型参数,8.0任然可以使用此方法,是默认一种类型。
新式的用法是Notification.Builder,需要传递类型参数
启动通知时,必须先声明这个参数,再使用,不能不传参数。
//创建一个通知类型:
Notifica