当前位置:首页 > 正文

问答:Android P都更新了哪些功能

作者:Judy发布时间:2023-02-28浏览:456


Android P的新功能特性集中在了UI、通知体验、室内定位、图像存储几个方面,解决了之前一直存在的痛点。例如WiFi RTT一定程度上弥补了蜂窝网络在室内环境下的定位问题,HEIC图像格式则重点解决了存储容量问题。

同时,Android P也在通知丰富度及操作便捷性等功能方面有所增强和提升。

一、WiFi RTT功能——复杂地形精确导航WiFi RTT功能是Android P新引入的一个功能,从原理上来说与蜂窝网络的定位原理一致,但这个功能极大的弥补了蜂窝网络在室内定位的短板,WiFi RTT将能够在室内提供高精度的定位,这是蜂窝网络很难做到的。WiFi RTT是全新的功能,在android.net.wifi包下增加了rtt包,用于存放WiFi RTT相关类和接口。WiFi RTT的API以WifiRttManager为核心,借助AP热点或WiFi,利用RTT原理完成测距,通过三个以上的测距点就能够准确地定位到设备所在位置。WiFiRTTManager提供了测距接口,是一个异步测距操作,根据官方文档(https://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager.html)说明,其测距接口如下:void startRanging(RangingRequest request, RangingResultCallback callback, Handler handler);注: SDK Platforms Android P Preview Revision 1的相关接口定义与此不同,但实际的官方镜像中接口与此一致,开发者需要更新最新的Android P Preview Revision 2,此版本中Google已经修正该接口。

接口中,RangingRequest通过RangingRequest.Builder构建,RangingRequest.Builder构建出RangingRequest所需要的参数可以通过WiFiManager等系统服务获取到相关的内容,如 List<ScanResult> scanResults = wifiManager.getScanResults();以下提供一个简单的测试Demo,以供参考:private WifiRttManager wifiRttManager;private WifiManager wifiManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {// ... ...if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)) {Object service = this.getApplicationContext().getSystemService(Context.WIFI_RTT_RANGING_SERVICE);if(service instanceof WifiRttManager) {wifiRttManager= (WifiRttManager) service;Log.i(TAG, "Get WifiRttManager Succ.");}wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);IntentFilter wifiFileter = new IntentFilter();wifiFileter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);wifiFileter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);wifiFileter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);registerReceiver(new WifiChangeReceiver(), wifiFileter);}// ... ...}private void startScanAPs() {wifiManager.setWifiEnabled(true);wifiManager.startScan();}class WifiChangeReceiver extends BroadcastReceiver {@RequiresApi(api = 28)@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {List<ScanResult> scanResults = wifiManager.getScanResults();Log.i(TAG, "Wifi Scan size:" + scanResults.size());for(ScanResult scanResult:  scanResults) {Log.i(TAG, scanResult.toString());RangingRequest.Builder builder = new RangingRequest.Builder();builder.addAccessPoint(scanResult);wifiRttManager.startRanging(builder.build(), new RangingResultCallback() {@SuppressLint("Override")@Overridepublic void onRangingFailure(int i) {// TODO}@SuppressLint("Override")@Overridepublic void onRangingResults(List<RangingResult> list) {// TODO get result from listfor(RangingResult result : list) {Log.i(TAG, result.toString());}}}, new Handler());}}}}使用WiFi RTT时,需要在AndroidManifest.xml中增加如下声明:<uses-feature android:name="android.hardware.wifi.rtt" />通过上面的简单代码,就能够实现WiFi RTT的功能。WiFi RTT功能适用于复杂地形的大型室内外场所,如商场、娱乐场所、大型休闲、游乐场等等,提供场所内的局部区域精确化导航等功能。相信在很快的时间内,就能够在各大地图应用内体验到这项便利功能,对于路痴、地图盲的伙伴们将是极大的福音。

二、显示剪切——支持刘海屏随着iPhone X的推出,“刘海屏”达到了空前的高潮。Android P里提供了对异形屏幕的UI适配兼容方案,通过DisplayCutout类提供的相关接口,能够获取到屏幕中Cutout区域的信息。借助DisplayCutout,可以获取到如下信息:DisplayCutout displayCutout = view.getRootWindowInsets().getDisplayCutout();if(displayCutout != null) {Region bounds = displayCutout.getBounds();Log.d(TAG, String.format("Bounds:%s", bounds.toString()));int top = displayCutout.getSafeInsetTop();int bottom = displayCutout.getSafeInsetBottom();int left = displayCutout.getSafeInsetLeft();int right = displayCutout.getSafeInsetRight();Log.d(TAG, String.format("Cutout edge:[left:%d, top:%d,right:%d, bottom:%d]", left, top, right, bottom));}public Region getBounds()能够获取到Cutout区域的所有信息,Region就是Cutout区域。

public int getSafeInsetTop()public int getSafeInsetBottom()public int getSafeInsetLeft()public int getSafeInsetRight()以上四个接口,可以获取到去除Cutout区域后的安全区域边界值。通过上述数据,开发者能够精准的控制UI的绘制,避免将UI内容绘制到Cutout区域造成UI显示异常。Android机器里,刘海屏目前还是极为罕见的Google为了方便开发者调试,在Android P Preview镜像中,特别提供了Cutout的支持,具体打开方式可以参考Google提供的特性说明文档cutout小节内容。

cutout小节:https://developer.android.com/preview/features.html#cutout如图所示,笔者使用手头的Pixel 2 XL体验了Android P的Cutout设置。三、通知优化——操作更多样,内容更丰富Android P在通知内容的丰富度和操作上做了优化。最近的版本中,Android系统的通知管理方面一直优化升级,Android O提供了更细粒度的Channel功能,通知栏推送时需要指定NotificationChannel,用户可以对通知的Channel选择,只允许感兴趣的Channel推送的通知显示。通过通道设置、免打扰优化等方式,极大增强了消息体验。

增强消息体验Android P继续改进和增强消息通知[v1] 。早在Android 7.0时,就提供了在通知中直接应答和输入,Android P对这一功能做了更多的增强。Android P的通知中支持图像内容,可以通过setData()方法,给出消息的图像内容,在通知上展示给用户。Android P同样简化了通知的配置形式。

Android P中增加了Notification.Person类,用于区分同一个对话的参与者信息,如参与者的头像、URI等。根据官方说明,Android P中,通知消息的其他一些API,也使用Person替代之前的CharSequence。简单的体验下新的API的开发:NotificationChannel channel = new NotificationChannel("WtTestChannel","WtTestChannel", NotificationManager.importANCE_DEFAULT);channel.enableLights(true); // luncher icon right corner's pointchannel.setLightColor(Color.RED); // read pointchannel.setShowBadge(true); // whether show this channel notification on long press iconNotification.Builder builder =new Notification.Builder(MainActivity.this,"WtTestChannel");Notification.Person p = new Notification.Person();p.setName("WeTest");p.setUri("http://cdn.wetest.qq.com/" +"ui/1.2.0/pc/static/image/newLogo-16042.png");Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);Notification.MessagingStyle.Message message =new Notification.MessagingStyle.Message("WeTestMessage", 2000, p);//show imageUri image = Uri.parse("http://cdn.wetest.qq.com/ui/1.2.0/pc/static/image/newLogo-16042.png");message.setData("image/png", image);messageStyle.addMessage(message);builder.setStyle(messageStyle);builder.setSmallIcon(R.mipmap.ic_launcher);Notification notification = builder.build();NotificationManager notifyManager =(NotificationManager) getSystemService(MainActivity.this.getApplicationContext().NOTIFICATION_SERVICE);notifyManager.createNotificationChannel(channel);notifyManager.notify("WeTest", 1, notification);通道设置、广播和免打扰优化Android P中,重点做了内容丰富上的工作,同时也对Channel的设置方面做了一些简化处理。Android O版本里,首次推出了NotificationChannel,开发者需要配置相应的Channel,才能够推送通知给用户。

用户能够更加细粒度[v1] 的针对App的Channel选择,而不是禁止App的所有通知内容。而在Android P中,对通知的管理做了进一步的优化,包括可以屏蔽通道组、提供新的广播类型和新的免打扰优先级。屏蔽通道组: 用户可以在通知设置中屏蔽App的整个通道组。

开发者可以通过isBlocked()来判断某个通道组是否被屏蔽了,并根据结果,不向已经被屏蔽的通道组发送任何通知。另外,开发者可以在App中使用新接口getNotificationChannelGroup()来查询当前的通道组设置。新的广播类型:新广播类型是针对通道和通道组的功能增加的“通道(组)屏蔽状态变化”广播。

开发者App中可以对所拥有的通道(组)接收广播,并根据具体广播内容作出动作。开发者可以通过NotificationManager,查看广播相关的具体信息。针对广播的动作可以通过Broadcasts查看具体的方法和信息。免打扰优先级: NotificationManager.Policy增加了两个新的优先级常量,PRIORITY_CATEGORY_ALARMS(警告优先),PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER (媒体、系统和游戏声音优先)。

四、支持多摄像机和相机共享近一段时间,双摄、多摄等机型纷纷面世。双摄及多摄提供了单摄像头所无法完成的能力,如无缝缩放、散景和立体视觉。Android P在这方面也提供了系统级的API支持。

Android P提供了系统API,支持从两个或者多个物理摄像头同步获取数据流。此前OEM厂商提供的双摄设备多是厂商自行定制系统实现,此时Android P推出了API,从系统层面上制定了API规范。新的API提供了在不同相机之间切换逻辑数据流或混合数据流的调用能力。在捕捉延迟方面,提供新的会话参数,降低初始捕捉延迟。

同时,提供相机共享能力,以解决在多种使用相机的场景下重复停止、开启相机流。闪光灯方面,Android P增加基于显示的闪光灯支持。光学防抖方面,Android P向开发者提供OIS时间戳,用于图像稳定性优化以及其他特效使用。

此外,Android P还支持外部USB/UVC相机,可以使用更强大的外置摄像头模组。五、支持图像媒体后期处理Android P引入了新的ImageDecoder,该类除了支�。


声明:部分资源转载自互联网,转载目的在于传递更多知识,并不代表本网赞同其观点和对其真实性负责。如有侵权或者知识有谬误之处,麻烦通知删除,谢谢!联系方式: zzsla2022#163.com