Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Nougat new Features for developer

Android Nougat new Features for developer

編輯:關於Android編程

Android Nougat

nougat

Android 7.0 經過5個開發者預覽版本的改善,終於在8.22日正式推送,並確定版本名為Nougat(牛軋糖)

根據官方的介紹,Android Nougat的主要更新有:

性能

JIT編譯器、VR模式、Vulkan? API

使用新的JIT編輯器是的系統及應用有更快的啟動速度同時使用更少的內存,在系統更新時你再也不會有“Android is upgrading”的過程;<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCgk8cD5WUsSjyr221NauuvO74beisry1xERheURyZWFtu+HT0Lj8usO1xNans9ajuzwvcD4NCgk8cD48YSBocmVmPQ=="https://www.khronos.org/vulkan/" title="Vulkan? API">Vulkan? API 是一款新的3D渲染API,使游戲應用擁有更絢麗的顯示效果和渲染效率,不過目前該API僅適用於支持Vulkan的硬件設備,如Nextus 5X 、6P等

功耗與數據

Doze模式、優化電池管理、data Saver模式、後台數據訪問

使用效率

分屏模式、picture-in-picture、最近任務快速切換(雙擊菜單鍵)

Android 7.0開始支持應用分屏多任務,可以將手機屏幕拆分為兩個顯示區域,每個顯示區域相當於一個單獨的桌面,可以同時打開不同的應用

Pip模式指在Android TV以及Tablet上支持應用以懸浮窗體顯示

最近任務快速切換(雙擊菜單鍵)

quick_switch

通知

捆綁通知、直接回復、通知控制

Android 7.0重新設計了通知系統的顯示和設置方式

系統可用性提升

自定義快捷設置、重新設計快捷設置欄、重新設計設置、緊急信息、鎖屏壁紙

Andorid 7.0的設置模塊經過交互的重新設置,操作更加便捷,同時系統提供了自定義設置的接口,允許應用通過實現特定服務和接口實現應用設置集成到系統設置及下拉選項中

Emoji

Unicode 9 emoji Emoji表情更新

隱私和安全

direct boot、靜默系統應用更新、基於文件的加密、文件訪問控制

設備安裝與遷移

Android備份將保存更多設置信息

多語言

本地多語言支持、新的語言及語言設置

輔助功能

可變文字轉語音(TTS)速度

系統在設置和通知上的優化

重新設計了Notification系統,Notification擁有更加豐富的交互操作以及自定義其顯示樣式

notification_setting direct_replay

重新設計了設置的交互,使設置操作更加快捷

quick_settings settings all_setting

作為應用開發人員,我們最感興趣的部分主要是分屏模式、通知系統和性能、功耗相關

分屏模式

默認設置 在當前窗口創建Activity並跳轉 android:resizeableActivity=”false” intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 不作為分屏窗口顯示 intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK); 在另一窗口中創建並顯示Activity

multi_windows

Pip(Picture-in-picture)模式

如果使用過Youtube應用,一定對其視頻播放可作為懸浮窗顯示在應用上層的操作體驗印象深刻,Pip模式與之類似允許Activity以窗體的方式顯示在其他Activity上層,不影響底層Activity的操作,遺憾的是目前Pip模式僅支持Android TV以及Tablet版本

通知系統

Notification在原有Notifacation.Action之上添加了Direct Reply功能

Tips:

RemoteInput

addRemoteInput(mRemoteInput)

direct_replay

使用Direct Reply Notification

    RemoteInput mRemoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY).setLabel("Replay").build();
    Intent intent = new Intent(this, TestActivity.class);
    intent.putExtra("notification_replay", true);
    PendingIntent mPendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        Notification.Action action = new Notification.Action.Builder(R.drawable.notification_icon, "Replay", mPendingIntent).
        addRemoteInput(mRemoteInput)
        .build();

    Notification notification = new Notification.Builder(getApplicationContext())
        .setContentTitle("ContentTitle")
        .setContentText("ContentText")
        .setSmallIcon(R.drawable.notification_icon)
        .setActions(action)
        .build();

    NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
        notificationManagerCompat.notify(NOTIFICATION_ID, notification);

direct_reply_release

Notification.Action: 我們可以根據需要為Notification添加多個操作按鈕 setActions(Action… actions)

完整代碼

    import android.app.Activity;
    import android.app.Notification;
    import android.app.PendingIntent;
    import android.app.RemoteInput;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.NotificationManagerCompat;
    import android.util.Log;
    import android.view.View;

    public class TestActivity extends Activity {
        private static final String TAG = "TestActivity";

        private static final String KEY_TEXT_REPLY = "key_test_reply";
        private static int NOTIFICATION_ID = 1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_test);

            findViewById(R.id.notification).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    send();
                }
            });

            if (getIntent().getExtras() != null) {
                if (getIntent().getExtras().getBoolean("notification_replay")) {
                    Bundle remoteInput = RemoteInput.getResultsFromIntent(getIntent());
                    if (remoteInput != null) {
                        Log.d(TAG, "onCreate: " + remoteInput.getCharSequence(KEY_TEXT_REPLY));
                    }
                    sendReceiverNotification();
                }
            }
        }

        private void sendReceiverNotification() {
            Notification secondNotification = new Notification.Builder(getApplicationContext())
                    .setSmallIcon(R.drawable.notification_icon)
                    .setContentText("Message sent.")
                    .build();

            NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
            notificationManagerCompat.notify(NOTIFICATION_ID, secondNotification);
        }

        public void send() {
            RemoteInput mRemoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY).setLabel("Replay").build();
            Intent intent = new Intent(this, TestActivity.class);
            intent.putExtra("notification_replay", true);
            PendingIntent mPendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            Notification.Action action = new Notification.Action.Builder(R.drawable.notification_icon, "Replay", mPendingIntent).
                    addRemoteInput(mRemoteInput)
                    .build();

            Notification.Action actionTest = new Notification.Action.Builder(R.drawable.notification_icon, "Test", mPendingIntent)
                    .build();

            Notification notification = new Notification.Builder(getApplicationContext())
                    .setContentTitle("ContentTitle")
                    .setContentText("ContentText")
                    .setSmallIcon(R.drawable.notification_icon)
                    .setActions(action,actionTest)
                    .build();

            NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
            notificationManagerCompat.notify(NOTIFICATION_ID, notification);
        }
    }

有關Notification的詳細設置可參考官方文檔 https://developer.android.com/guide/topics/ui/notifiers/notifications.html

Quick Settings Tile API

在Android 7.0上系統提供了用戶添加自己的設置選項下拉設置內容中,具體參考android.service.quicksettings.Tile

彩蛋:當系統開啟開發者權限後,你會在設置編輯中看到顯示圖層便捷和GPU渲染的快捷設置項,很好用的一個設計

developer_mode

功耗

Android 7.0中進一步增強Doze對CPU喚醒的控制和網絡限制

私有文件權限

Android 7.0 修改了私有文件的訪問權限,在Android 7.0上讀寫私有文件出會提示SecurityException.FileUriExposedException異常

Android O & Fuchsia

Google Fuchsia項目

https://fuchsia.googlesource.com

https://fuchsia-review.googlesource.com

參考文檔:

https://www.android.com/versions/nougat-7-0/

https://developer.android.com/about/versions/nougat/index.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved