代号Pie!Android 9.0那些开发者必须知道的事

北京时间2018年8月7日,Google官方发布了Android 9.0版本,代号为Pie。没有发布会,也没有其他仪式,尽管Google之前已经对Pie 做了不少预热工作(比如在中国国内四五月份就有一些Google官方主办的Android P线下交流会)这对国内广大Android开发者可能是个喜忧参半的消息:Android 8.0还没适配好呢就给我来个9.0。

当然,Android 9.0 带给了我们许多可以称得上惊喜的新特性,比如自适应电池(AI的应用)、全新的MD等等,这些网上的许多文章已经详细介绍过了。本篇文章对此不做赘述,只专注于那些跟安卓开发者有关的新特性与API。看完可能会让某些不喜欢吃Pie 的开发者感觉:真香!

本文所有内容都可以从Android开发者官网 找到(只是目前是纯英文)

真香警告

使用RTT API 进行更精准的室内定位

Android 9新增了对IEEE 802.11mc Wi-Fi 协议(也就是RTT)的平台支持,这可以让开发者更精确地进行室内定位,对于一些使用LBS服务的的应用来说,这是个利好消息。

在运行Android 9且硬件支持的设备上,开发者可以使用RTT API来计算设备到附近的RTT协议的无线访问节点的距离,所谓“硬件支持是指:设备支持位置服务,且打开了WIFI扫描,且App拥有定位权限。出于隐私考虑,这个设备并不会连接到这个无线节点,只有设备可以确认自己到节点的距离,而无线节点并不能获取这个数据。

假如设备能获取到3个或以上的的节点的距离,就可以使用算法计算到设备的准确位置(从数学的角度来看,知道一个点到另外三个点的距离可以确定这个点的位置),结果的精度可以控制在1到2米内。

基于此,可以开发室内导航服务等。

跟RTT定位有关的API主要在 android.net.wifi.rtt包内,使用RTT定位,首先需要获取WifiRttManager

Context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE)

一些API需要获取ACCESS_WIFI_STATE,CHANGE_WIFI_STATE,ACCESS_FINE_LOCATION等权限

当然,使用这个API也需要设备支持WIFI定位。

Tips:不是所有设备都支持RTT定位。假如你的应用只支持WIFI RTT定位才能运行,那么发布在Google Play上时只能由支持此类功能的设备才能下载。且需要如下声明:

<manifest ...>
    <uses-feature android:name="android.hardware.wifi.rtt" />
    ...
</manifest>

若不使用RTT也能正常运行,可以在代码中这样监测是否能使用RTT定位:

getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)

使用RTT定位相关的方法,主要在RangingRequest,RangingRequest.Builder,RangingRequestCallback,WIfiRttManager这些类中,有兴趣的可以自行查阅。

屏幕适配(全面屏,刘海屏)

Android提供了最最新的全面屏的支持,包括刘海屏。

DisplayCutout这个类使得开发者可以找到那些无功能区域的位置和形状,在这些区域上无须展示内容。使用getDisplayCutout可以帮助我们确定这些区域是否存在以及位置。

一个新的布局属性, layoutInDisplayCutoutMode,可以允许开发者将应用内容平铺在刘海的周围,这个属性有下面三个值:`

当然,在没有刘海屏的手机上我们也可以通过以下步骤进行刘海适配:

1.打开开发者选项

2.下拉到Drawing选项,并选择Simulate a display with a cutout(暂时不知道国内机子上Android 9这两处翻译是什么,后续更新)

3.选择刘海尺寸


刘海屏适配

通知

Android 9引进了一些对通知的提升,只支持API 28 及以上。

一、提升短信体验

从Android 7.0(API 24)开始,我们可以添加一个Action来回复短信,或者直接在通知栏中输入文字。Android 9提升了这方面的体验:

短信的提升:Person这个类可以用来分辨参与短信会话的人,包括他们的头像和URL。还有一些其他API,比如 addMessage() ,可以直接作用于 Person类而不仅仅是一段字符串(CharSequence)。Person类支持构建者模式(Builder)。

短信通知支持图片:开发者可以使用在Message中使用SetData()来展示图片,以下代码展示上文相关功能:

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
船新的短信体验

保存回复作为草稿:当用户不经意间关闭通知时, app 可以接收到系统发送的 EXTRA_REMOTE_INPUT_DRAFT ,使用这个EXTRA 参数保存的字段,我们可以存储下用户要发送的回复短信的草稿。

确认是否群组会话:开发者可以使用 **setGroupConservation() **来确认一个会话是群组会话或者非群组会话

为Intent的设置有语义的action:通过 **setSemanticAction() **这个方法,我们可以为action赋予语义,比如:“mark as read," "delete," "reply"

智能回复:Android 9会使用跟用户的短信app一样的便捷回复,使用 RemoteInput.setChoices() 来展示包含标准回复的数组给用户。

船新的短信体验

二、通知频道(channel)设置,广播,和勿扰模式

Android 8.0引进了通知频道(NotificationChannel) ,可以让开发者为每个想要展示的通知创建用户自定义的频道,Android 9简化了通知频道的设置:

阻塞通知群组:用户可以在应用的通知设置中设置阻止整个通知群组。开发者可以使用NotificationChannelGroup.isBlocked()来识别群组被阻止的时间,从而不会发送该组频道中的任何通知。

另外,开发者可以通过 getNotificationChannelGroup() 来获取当前频道群组设置。

新的广播(Broadcast) intent 类型:当通知频道和频道组的阻塞状态发生变化时,Android系统现在会发送广播意图(intent),拥有被阻止的频道或组的应用程序可以监听这些意图并做出相应的反应。有关这些意图操作和附加内容的更多信息,可以参阅NotificationManager 中更新的常量列表。有关对广播意图作出反应的信息,可以参阅 Broadcasts

NotificationManager.Policy 拥有三种新的 勿打扰模式 优先级类别:

NotificationManager.Policy还有七个新的Do-Not-Disturb(勿打扰)常量可用于抑制视觉中断:

由于篇幅所限,本文章目前仅介绍跟开发者密切相关的更新,后续还有双摄支持,相机更新,针对Bitmap和Drawable的新的图像解码方式(ImageDecoder),GIF和WEB动画的绘制(AnimatedImageDrawable)等,如果有希望了解更多的同学可以留言关注,考虑再更新一篇文章阐述其他新特性。如果文章有什么谬误的地方,也欢迎留言探讨。
点赞加关注解锁博主更多知识😝

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容