Android 9.0 新特性

對於android開發者來說,最新系統的新特性是主要關注點。app中新系統的匹配尤爲重要。

新特性
室內WIFI定位
Android P增加了對RTT Wi-Fi協議的支持,以此作爲室內定位的基礎。 
在支持硬件支持的Android P設備上,開啓定位並且打開WIFI掃描後就可以使用該功能進行定位。應用可以測量與附近支持RTT的Wi-Fi接入點(AP)的距離。設備必須啓用位置並啓用Wi-Fi掃描(在設置>位置下)。使用這個功能不會連接到WIFI,而且爲了保持隱私,只有手機能確定AP到設備的距離,反之則不能。 
如果設備測量到3個或更多AP的距離,則可以使用多點定位算法來估算最適合這些測量值的設備位置。其結果通常可以精確到1至2米範圍。

//注:該處在2018.3.8的版本中還有bug,WIFI_RTT_RANGING_SERVICE沒有添加到@ServiceName標記中
WifiRttManager wifiRttManager = (WifiRttManager) getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint();
builder.addWifiAwarePeer();
wifiRttManager.startRanging(builder.build(), () -> {...}, new RangingResultCallback{...});

該功能API在android.net.wifi.rtt下。

“劉海”屏幕支持
Android P 支持了手機屏幕是不規則形狀時的獲取(主要是應對劉海屏吧)。可以使用類似windowInsets.getDisplayCutout()來獲取一些你想要的信息。

//您可以在自己的View中獲取到不應該繪製的部分屏幕
getRootWindowInsets().getDisplayCutout().getBounds();
getRootWindowInsets().getDisplayCutout().getSafeInsetBottom();
getRootWindowInsets().getDisplayCutout().getSafeInsetLeft();
getRootWindowInsets().getDisplayCutout().getSafeInsetRight();
getRootWindowInsets().getDisplayCutout().getSafeInsetTop();
//也可以設置Window的屬性
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;

通知
Android P還增加了許多對通知的支持。

增強體驗
從Android 7.0開始,就優化了Android通知欄的體驗。 
在P當中,又新增了下述功能: 
支持圖像:Android P現在在手機上的消息通知中顯示圖像。您可以在消息上使用setData()來顯示圖像。 
會話參與者的簡化支持:新的Notification.Person類用於標記參與聊天的人,包括他們的頭像和URI。還有其他的一些API,現在都用Person類作爲標誌參數而不是CharSequence。

Notification.Builder builder = new Notification.Builder(this, "a");
//新的聊天對象
Notification.Person p = new Notification.Person();
//在MessagingStyle中用Person代替了以往的CharSequence
Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);
Notification.MessagingStyle.Message message = new Notification.MessagingStyle.Message("aaa", 100, p);
//可以顯示圖像了
message.setData();
messageStyle.addMessage(message);
builder.setStyle(messageStyle);
Notification notification = builder.build();

將回復另存爲草稿:當用戶無意中關閉消息通知時,您的應用可以檢索系統發送的EXTRA_REMOTE_INPUT_DRAFT來獲取一些信息。 
確定對話是否是羣組對話:您可以使用setGroupConversation()來有目的地將對話標識爲羣組對話或非羣組對話。 
爲意圖設置語義動作:setSemanticAction()方法允許您爲某個動作提供語義含義,如標記爲讀取,刪除,回覆等。 
SmartReply

通道設置、廣播以及免打擾
Android O引入了Notification Channels,可讓您爲要顯示的每種類型的通知創建一個用戶可自定義的頻道。 Android P通過以下更改簡化了通知渠道設置: 
阻止渠道:用戶現在可以在應用的通知設置中阻止整組渠道。您可以使用isBlocked()方法來確定某個組何時被阻止,不對被阻止的組發送消息。 
此外,您的應用可以使用新的getNotificationChannelGroup()方法查詢當前渠道設置。 
新的廣播類型:Android系統現在在通知頻道和頻道組的阻塞狀態發生變化時發送廣播。擁有被阻止的頻道或羣組的應用可以監聽這些Intent並作出相應的反應。有關這些Intent的更多信息,請參閱NotificationManager參考中更新後的常量列表。有關對廣播Intent作出反應的信息,請參閱廣播。 
新的免打擾優先級類別:NotificationManager.Policy有兩個新的策略常量:PRIORITY_CATEGORY_ALARMS(按優先級排列)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER(優先排列媒體,系統和遊戲聲音)

多相機支持和相機更新
現在,可以同時從兩個或更多的物理攝像頭同時獲得數據流。在具有雙前置或雙後置攝像頭的設備上,可以實現無法使用單個攝像頭實現的功能,例如無縫縮放,散景 ,和立體視覺。 該API還允許您調用合理的或者融合的相機流,以便在兩臺或更多臺相機之間自動切換。 
相機的其他改進包括新的android.hardware.camera2.params.SessionConfiguration,有助於減少初始捕捉期間的延遲。而Surface共享可讓相機客戶端處理各種使用情況,而無需停止和啓動相機流式傳輸。 此外還添加了基於顯示的閃光燈支持的API。 
Android P還支持支持deveices上的外部USB / UVC相機。

新的圖片解碼
Android P新增了ImageDecoder類,爲解碼圖像提供了一種更優的方法。由此可以用ImageDecoder來替換BitmapFactory和BitmapFactory.Options。更多使用方法請參見官方API。

String filePath = "test";
File file = new File(filePath);
ImageDecoder.Source source = ImageDecoder.createSource(file);
ImageDecoder.decodeBitmap(source);
ImageDecoder.decodeDrawable(source, (imageDecoder, imageInfo, source1) -> {
    //裁剪圖像
    imageDecoder.setCrop();
    //調整大小
    imageDecoder.setResize();
});
BitmapFactory.decodeFile(filePath);
動畫
Android P引入了一個新的AnimatedImageDrawable類來繪製和顯示GIF和WebP動畫圖像。 AnimatedImageDrawable與AnimatedVectorDrawable類似,因爲AnimatedImageDrawable動畫也是基於RenderThread工作的。 RenderThread本身在內部使用工作線程進行解碼,因此解碼不會干擾RenderThread。 這種實現允許您的應用擁有動畫圖像,而無需管理其更新或干擾應用的UI線程。

Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
    // Prior to start(), the first frame is displayed
    ((AnimatedImageDrawable) d).start();  
}

HDR VP9視頻,HEIF圖像壓縮和媒體API
Android P增加了對HDR VP9 Profile 2的內置支持。

Android P支持HEIF圖像(隔壁IOS在2017年10月推的新的圖片編碼)編碼。 
Android P還引入了MediaPlayer2。該播放器支持使用DataSourceDesc構建的播放列表。

MediaPlayer2.create();
1
注:筆者對圖像/視頻編解碼方面不甚了了,有興趣的可以自行參閱API。

JobScheduler中的數據成本敏感度
在Android P當中,JobScheduler得到了改進,使其能夠更好地爲用戶處理與網絡相關的工作,並配合運營商分別提供網絡狀態信號。 
Jobs現在可以定義出其估計的數據大小,預取信號,並指定詳細的網絡要求 - 運營商可以將網絡報告爲擁塞或不用流量計費的。然後,JobScheduler根據網絡狀態管理工作。例如,當網絡擁塞時,JobScheduler可能推遲大型網絡請求。在不用流量計費的的網絡上時,JobScheduler可以預讀來改進用戶體驗。

神經網絡API 1.1
對神經網絡API新增了9個功能:Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub, and Squeeze。

改進表單自動填充
Android 8.0(API26)引入了自動填充框架,這使得在應用中填寫表單變得更加容易。 Android P引入了自動填充服務並實現了多項改進,以在填寫表單時進一步增強用戶體驗。 有關更多詳細信息,請參閱自動填充框架。 
注:該自動填充框架筆者應是Google服務中的內容,國內用戶可能會體驗不到(或許有廠商自己的版本)。

安全增強
Android P引入了許多新的安全功能,包括統一的指紋驗證對話框和敏感交易的高確信度的用戶確認。 有關更多詳細信息,請參閱安全更新頁面。

Android 備份加密
Android P支持使用客戶端密鑰對Android備份進行加密。 這項隱私措施,需要設備的PIN,圖案密碼或標準密碼才能從用戶設備備份的數據中恢復數據。 
要了解有關在Android設備上備份數據的更多信息,請參閱數據備份概述。 
--------------------- 
作者:GenlanFeng 
來源:CSDN 
原文:https://blog.csdn.net/GenlanFeng/article/details/79496359 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章