Android 11 发布,有哪些值得关注的新特性?

用户能感知到的界面调整

Dock栏转折

在首次竖立 Android 11 时,体系会挑示你是否必要在主屏幕的Dock栏展现行使提出。在开启后,体系选举的行使会以带浅色外圈的样式展现以示区别。

展望的切实性清淡,只要吾继续接蓝牙,Dock栏就会表现Spotify,固然吾已经益多天都异国掀开Spotify。

知照照顾中央

Android 10 将知照照顾简化为优先和静音两个级别,Android 知照照顾中央对这两类知照照顾的表现也最先有了清晰的分区。而在 Android 11 中,Google 深化了差别类别知照照顾之间的分隔效率。

对话泡功能

在 Android 11 中,Google 最先强调「人脉疏导(People)」这一切念,同时将知照照顾中的闲谈新闻以「对话」的式样自力出来,从表现手段到交互手段上为这些新闻知照照顾赋予新的样式。

这一功能必要行使本身适配新的对话泡 API 才能行使,必要各大App进走适配,说你呢,微信。

崭新电源菜单

之前是Pixel独享,现在只要升级Android11,都能够享福。新的电源界面也盛开了 API,批准第三方 OEM 手机厂商与 App 开发者来为其增补更多功能,差别品牌的 Android 手机厂商也能够现有的 Google 系服务将其替换成自家的服务,比如替换为米家家居控制界面等。

媒体控制卡片

崭新的卡片式媒体控制也带来了新功能,吾们能够借助这个新功能同时控制多个来源的媒体播放,知照照顾中央的媒体控制中央最多能够同时控制来自 5 个 App 的播放进度,能够滑动切换。

此外,锁屏状态下的音乐控制也发生了一些转折:作废了专辑封面的高斯暧昧,封面表现在了左侧。幼我觉得展现效率更益了。

新的截图交互

在 Android 11 中,截图知照照顾采用了与 iOS 特意相通的左下角缩略图进走展现,缩略图下方还会挑供一个带有分享、编辑等常用操作的工具栏。用户分享截图更方便了。

多义务界面

Google 对多义务界面进走了重新设计,多义务界面中新添了一个名为【Select】的菜单,点击后能够将现在义务卡片上可挑取的文本统统标记出来。经过测试,对中文并不友益,吾逆正没用过。

用户感知不大的功能

分区存储

在 Android 11 中,为了更益的珍惜用户数据并控制设备冗余文件增补,Android 11版本变更了设备外部存储访问手段,外部存储新特性称为分区存储(Scoped Storage), 分区存储对外部存储文件访问手段重新设计,便于用户更益的管理外部存储文件。传统行使在声援分区存储特性的同时也能够相符理迁移旧版数据来保证用户的平常访问。

以后你的现在录就不会杂乱无章了。

隐私权限改进

Android 11 添入了「仅限这一次」的授权手段。这栽手段适用于位置、麦克风和相机这三类权限,将授权粒度从行使内授权进一步扩展到了单次行使授权。

除了单次授权机制,肆意行使的权限管理页面底部还挑供了一个「倘若行使未行使则移除相关权限」的选项,勾选这个功能后,现在的行使所获取到的权限允诺会在闲置一段时间不消后被自动撤销,避免用户遗忘关闭隐私新闻的情况。

Android 发展了这么多年,新功能方面能够异国太多惊喜。但是很起劲望到 Android 11 在隐私坦然方面又进了一大步!说一下吾最憧憬的关于隐私坦然几个点:

一次性权限:在 Android 11 中,每当行使乞求与位相新闻、麦克风或摄像头相关的权限时,面向用户的权限对话框会包含仅限这一次选项。倘若用户在对话框中选择此选项,体系会向行使赋予一时的单次授权。权限自动重置:倘若行使以 Android 11 为现在的平台并且数月未行使,体系会经由过程自动重置用户已赋予行使的运走时敏感权限来珍惜用户数据。此操作与用户在体系竖立中查望权限并将行使的访问权限级别更改为拒绝的做法效率相通。后台访问位相新闻:开发者必要获得允诺才能访问其行使程序中的后台位置,以防止滥用。

权限方面的添强能够进一步治理相关权限的滥用,尤其控制那些在后台做些鸡鸣狗盗之事的行使。后台访问位相新闻也得到了进一步管控,这几年位置权限滥用题目不息比较主要,期待这波能有所改善。

国内适配 Android 11 的幼米 MIUI 正在内测,OPPO 适配 Android 11 的的新体系相通月终就会发布正式版。行为用户,吾期待国内手机厂商能够早日完善体系更新。

Android11正式版已经发布了,吾行为一个Android开发者,想从适配方面说说这次Android11改动了哪些东西。以及最主要的,吾们必要怎么适配?targetversion不改到30,是不是就不消适配了呢?(也能够直接望原链接哦——拖不得了,Android11真的要来了,最全适配实践指南奉上 - 掘金)

关注公多号(码上积木),成为Android offer收割机。

---------------序言分割线---------------------

以下吾分为两片面讲述,别离是 以Android11 为现在的版本的行使(targetSdkVersion>=30才有影响)? 一切行使在Android11设备上适配改动(不论targetSdkVersion是多少,只要在Android11设备上运走的行使都有影响)

为什么先说targetSdkVersion>=30的模块呢?由于清淡来说为了Google为了让吾们更长时间适宜新的内容以及保障线上行使的安详,都会把改动大的,必要花时间适配的内容放到新的targetSdkVersion对答的行使上,倘若你一时异国适配targetSdkVersion30的需求,也能够望望第二模块,望望是否有涉及你的行使相关内容。GOGOGO!

Tips:此适配文章会不中止更新,按照Android11发布进度调整,迎接点赞关注。(打?的特殊仔细哦)

适配targetSdkVersion30

此模块的修改内容只针对targetSdkVersion 30或者以上才成绩。

分区存储强制实走? 对外部存储现在录的访问仅限于行使专属现在录,以及行使已创建的特定类型的媒体。

关于分区存储,在Android10就已经推走了,浅易的说,就是行使对于文件的读写只能在沙盒环境,也就是属于本身行使的现在录内里读写。其他媒体文件能够经由过程MediaStore进走访问。

但是在android10的时候,Google还是为开发者考虑,留了一手。在targetSdkVersion = 29行使中,竖立android:requestLegacyExternalStorage="true",就能够不启动分区存储,让以前的文件读取平常行使。但是targetSdkVersion = 30中不可了,强制开启分区存储。 自然,行为人性化的android,还是为开发者留了一幼手,倘若是遮盖装配呢,能够增补android:preserveLegacyExternalStorage="true",一时关闭分区存储,益让开发者完善数据迁移的做事。为什么是一时呢?由于只要卸载重装,就会失效了。以下是关于分区存储会遇到的一切情况,给行家罗列出来了,先上代码:

fun saveFile() {
        if (checkPermission()) {
            //getExternalStoragePublicDirectory被舍用,分区存储开启后就不批准访问了
            val filePath = Environment.getExternalStoragePublicDirectory("").toString() + "/test3.txt"
            val fw = FileWriter(filePath)
            fw.write("hello world")
            fw.close()
            showToast("文件写入成功")
        }
    }

分情况运走: 1) targetSdkVersion = 28,运走后平常读写。 2) targetSdkVersion = 29,不删除行使,targetSdkVersion 由28修改到29,遮盖装配,运走后平常读写。 3) targetSdkVersion = 29,删除行使,重新运走,读写报错,程序休业(open failed: EACCES (Permission denied)) 4) targetSdkVersion = 29,增补android:requestLegacyExternalStorage="true"(不启用分区存储),读写平常不报错 5) targetSdkVersion = 30,不删除行使,targetSdkVersion 由29修改到30,读写报错,程序休业(open failed: EACCES (Permission denied)) 6) targetSdkVersion = 30,不删除行使,targetSdkVersion 由29修改到30,增补android:preserveLegacyExternalStorage="true",读写平常不报错 7) targetSdkVersion = 30,删除行使,重新运走,读写报错,程序休业(open failed: EACCES (Permission denied))

ok,那到底答该怎么改呢?三栽手段访问文件:

1)行使专属现在录

//分区存储空间
val file = File(context.filesDir, filename)

//行使专属外部存储空间
val appSpecificExternalDir = File(context.getExternalFilesDir(), filename)

2)访问公共媒体现在录文件

val cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, "${MediaStore.MediaColumns.DATE_ADDED} desc")
if (cursor != null) {
    while (cursor.moveToNext()) {
        val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))
        val uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id)
        println("image uri is $uri")
    }
    cursor.close()
}

3) SAF(存储访问框架--Storage Access Framework)

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
    intent.addCategory(Intent.CATEGORY_OPENABLE)
    intent.type = "image/*"
    startActivityForResult(intent, 100)

    @RequiresApi(Build.VERSION_CODES.KITKAT)
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (data == null || resultCode != Activity.RESULT_OK) return
        if (requestCode == 100) {
            val uri = data.data
            println("image uri is $uri")
        }
    }

详细还有许多操作能够望望网上关于分区存储的原料,由于Android10已经出来很久了,因而原料还是许多的,这边选举几篇 访问行使专属文件 Android 10适配要点,作用域存储 AndroidQ(10)分区存储完善适配

说到这边能够又有人问了,那吾的行使就是个手机管理器,总不克不让吾清其他行使的缓存了吧,有手段!Android挑供了两个intent入口: 调用ACTION_MANAGE_STORAGE intent 操作检查可用空间。 调用ACTION_CLEAR_APP_CACHE intent 操作消弭一切缓存。

说来说去,逆正行使数据私有化是大势所趋,还是早点适配分区存储,别等以后手机只有沙盒机制的时候,就来不敷了。

媒体文件访问权限 ? 为了在保证用户隐私的同时能够更轻盈地访问媒体,Android 11 增补了以下功能。实走批量操作和行使直接文件路径和原生库访问文件。

1)实走批量操作

这边的批量操作指的是Android 11 向 MediaStore API 中增补了多栽手段,用于简化特定媒体文件更改流程(例如在原位置编辑照片),别离是: createWriteRequest() 用户向行使赋予对指定媒体文件组的写入访问权限的乞求。 createFavoriteRequest()用户将设备上指定的媒体文件标记为“珍藏”的乞求。对该文件具有读取访问权限的任何行使都能够望到用户已将该文件标记为“珍藏”。 createTrashRequest() 用户将指定的媒体文件放入设备垃圾箱的乞求。垃圾箱中的内容会在体系定义的时间段后被长期删除。 createDeleteRequest() 用户立即长期删除指定的媒体文件(而不是先将其放入垃圾箱)的乞求。

直接望个例子:

val urisToModify = listOf(uri,uri,...)
val editPendingIntent = MediaStore.createWriteRequest(contentResolver,
        urisToModify)

// Launch a system prompt requesting user permission for the operation.
startIntentSenderForResult(editPendingIntent.intentSender, EDIT_REQUEST_CODE,
    null, 0, 0, 0)


override fun onActivityResult(requestCode: Int, resultCode: Int,
                 data: Intent?) {
    when (requestCode) {
        EDIT_REQUEST_CODE ->
            if (resultCode == Activity.RESULT_OK) {
                /* Edit request granted; proceed. */
            } else {
                /* Edit request not granted; explain to the user. */
            }
    }
}

传入uri的荟萃,获取用户的批准后,就能够进走操作了。

2)直接文件路径和原生库访问文件

没错!Android11又恢复了行使直接文件路径访问访问媒体文件!哈哈,云云就方便多了。也就是除了 MediaStore API之外还有两栽手段能够访问媒体文件: File API。 原生库,例如 fopen()。

那Android10咋办呢??要不就用MediaStore,要不就直接把分区存储关了吧(requestLegacyExternalStorage=true)

一切文件访问权限 ?

固然说了这么多,但是还有些行使就要访问一切文件,比如杀毒柔件,文件管理器。坦然,有手段!MANAGE_EXTERNAL_STORAGE 这不来了吗。 这个权限就是用来获取一切文件的管理权限。 :

uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

    val intent = Intent()
    intent.action= Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
    startActivity(intent)

    //判定是否获取MANAGE_EXTERNAL_STORAGE权限:
    val isHasStoragePermission= Environment.isExternalStorageManager()

来张截图过过瘾:

电话号码相关权限 ? Android 11 更改了您的行使在读取电话号码时行使的与电话相关的权限。

详细改了什么呢?其实就是两个API: TelecomManager 类中的 getLine1Number() 手段 TelecomManager 类中的 getMsisdn() 手段

也就是当用到这两个API的时候,正本的READ_PHONE_STATE权限不管用了,必要READ_PHONE_NUMBERS权限才走。

下面详细说说,targetSdkVersion修改到30,然后运走一个获取电话号码的程序:

ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.READ_PHONE_STATE), 100)

        btn2.setOnClickListener {
            val tm = this.applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
            val phoneNumber = tm.line1Number
            showToast(phoneNumber)
        }

休业了:

java.lang.SecurityException: getLine1NumberForDisplay: Neither user 10151 nor current process has android.permission.READ_PHONE_STATE, android.permission.READ_SMS, or android.permission.READ_PHONE_NUMBERS

意料之中哈,Andmanifest.xml中注册益权限,并且增补动态权限申请:

uses-permission android:name="android.permission.READ_PHONE_STATE" />
    uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />


    ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.READ_PHONE_STATE,Manifest.permission.READ_PHONE_NUMBERS), 100)

搞定,倘若你只必要获取手机号码这一个功能,也能够只申请READ_PHONE_NUMBERS这一个权限:

uses-permission android:name="android.permission.READ_PHONE_STATE"  android:maxSdkVersion="29" />
    uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
自定义新闻框视图被屏蔽 ? 从 Android 11 最先,已舍用自定义新闻框视图。倘若您的行使以 Android 11 为现在的平台,包含自定义视图的新闻框在从后台发布时会被屏蔽

能够有人会清新了,什么是自定义新闻框视图啊?吾说英文你就晓畅了,英文是custom toast views,也就是自定义toast。浅易写个代码:

Toast toast = new Toast(context);
    toast.setDuration(show_length);
    toast.setView(view);
    toast.show();

糟了糟了,自定义toast被舍用了?吾们项现在就是用的这个啊!不消不安,只是不批准自定义toast从后台表现了。 比如吾写一个3秒后再表现toast,然后行使一掀开就进入后台,望望会发生什么:

Handler().postDelayed({
          IToast.show("你益,吾是自定义toast")
     }, 3000)


     W/NotificationService: Blocking custom toast from package com.example.studynote due to package not in the foreground

啥也没表现,只是发出来一个警告。 因而不消太甚不安,倘若切实必要后台表现,就用清淡的toast吧!

现在必要 APK 签名方案 v2 ? 对于以 Android 11(API 级别 30)为现在的平台,且现在仅行使 APK 签名方案 v1 签名的行使,现在还必须行使 APK 签名方案 v2 或更高版本进走签名。用户无法在搭载 Android 11 的设备上装配或更新仅经由过程 APK 签名方案 v1 签名的行使。

这个介绍已经很清晰了吧,倘若你的targetSdkVersion修改到30,那么你就必须要添上v2签名才走。否则无法装配和更新。

媒体intent操作必要体系默认相机 ?

从 Android 11 最先,只有预装的体系相机行使能够回响反映以下 intent 操作:

android.media.action.VIDEO_CAPTURE android.media.action.IMAGE_CAPTURE android.media.action.IMAGE_CAPTURE_SECURE

也就是说,倘若吾调用intent唤首照相机,行使VIDEO_CAPTURE的action,只有体系的相机能够回响反映,而第三方的相机行使不会回响反映了。

val intent=Intent()
    intent.action=android.provider.MediaStore.ACTION_IMAGE_CAPTURE
    startActivity(intent)

    //无法唤首第三方相机了,只能唤首体系相机

这点对清淡的相机行使还是有点抨击的,官方给的提出是倘若要行使特定的第三方相机行使来代外其捕获图片或视频,能够经由过程为intent竖立柔件包名称或组件来使这些intent变得清晰。

5G ? Android 11 增补了在您的行使中声援 5G 的功能

新的Android11也是声援了5G相关的一些功能,包括: 检测是否连接到了5G网络 检查按流量计费性

最先是检测5G网络,经由过程TelephonyManager的监听手段:

private fun getNetworkType(){
        val tManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        tManager.listen(object : PhoneStateListener() {

            @RequiresApi(Build.VERSION_CODES.R)
            override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
                if (ActivityCompat.checkSelfPermission(this@Android11Test2Activity, android.Manifest.permission.READ_PHONE_STATE) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
                    return
                }
                super.onDisplayInfoChanged(telephonyDisplayInfo)

                when(telephonyDisplayInfo.networkType) {
                    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> showToast("高级专科版 LTE (5Ge)")
                    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> showToast("NR (5G) - 5G Sub-6 网络")
                    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> showToast("5G+/5G UW - 5G mmWave 网络")
                    else -> showToast("other")
                }
            }

        }, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
    }

倘若是5g网络,就免不了要去判定是不是按流量计费的,否则5G的流量可不是开玩乐的。

检测流量计费手段也很浅易,监听网络,在回调中判定:

val manager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
     manager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {
        override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
          super.onCapabilitiesChanged(network, networkCapabilities)

            //true 代外连接不按流量计费
            val isNotFlowPay=networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) ||
                            networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED)
          }
    })

判定该值,倘若为 true,则将连接视为不按流量计费。

后台位相新闻访问权限 ? 在搭载 Android 11 的设备上,当行使中的某项功能乞求在后台访问位相新闻时,用户望到的体系对话框不再包含用于启用后台位相新闻访问权限的按钮。如需启用后台位相新闻访问权限,用户必须在竖立页面上针对行使的位置权限竖立整齐批准选项。

什么意思呢?主要涉及到两点: 从Android10体系的设备最先,就必要乞求后台位置权限(ACCESS_BACKGROUND_LOCATION),并选择Allow all the time (首终批准)才能获得后台位置权限。Android11设备上再次添强对后台权限的管理,主要外现在体系对话框上,对话框不再挑示首终批准字样,而是挑供了位置权限的竖立入口,必要在竖立页面选择首终批准才能获得后台位置权限。 在搭载Android11体系的设备上,targetVersion幼于30的时候,能够前台后台位置权限一首申请,并且对话框挑供了文字表明,外示必要随时获取用户位相新闻,进入竖立选择首终批准即可。但是targetVersion为30的时候,你必须单独申请后台位置权限,而且要在获取前台权限之后,挨次不克乱。并且无任何挑示,必要开发者本身设计挑示样式。

能够有点绕,操作几个例子表明:

1)Android10设备,申请前台和后台位置权限(肆意targetSdkVersion):

requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION), 100)

实走效率:

2)Android11设备,targetSdkVersion

requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION), 100)

实走效率:

3)Android11设备,targetSdkVersion=30(Android 11),申请前台和后台位置权限:

requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION), 100)

实走无逆答

4)Android11设备,targetSdkVersion=30(Android 11),先申请前台位置权限,后申请后台位置权限:

requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), 100)

实走效率:

requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), 100)

实走效率(直接跳转到竖立页面,无任何表明):

因而,该怎么适配呢? targetSdkVersion情况下,倘若你之前就有判定过前台和后台位置权限,那就无需不安,异国什么必要适配。 targetSdkVersion>30情况下,必要睁开申请前后台位置权限,并且对后台位置权限申请做益表明和引导,自然也是为了更益的服务用户。

权限申请的demo代码:

val permissionAccessCoarseLocationApproved = ActivityCompat
        .checkSelfPermission(this, permission.ACCESS_COARSE_LOCATION) ==
        PackageManager.PERMISSION_GRANTED

    if (permissionAccessCoarseLocationApproved) {
       val backgroundLocationPermissionApproved = ActivityCompat
           .checkSelfPermission(this, permission.ACCESS_BACKGROUND_LOCATION) ==
           PackageManager.PERMISSION_GRANTED

       if (backgroundLocationPermissionApproved) {
            //前后台位置权限都有
       } else {
            //申请后台权限
            if (applicationInfo.targetSdkVersion  Build.VERSION_CODES.R){
                ActivityCompat.requestPermissions(this,
                        arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION),
                        200)
            }else{
                AlertDialog.Builder(this).setMessage("必要挑供后台位置权限,请在竖立页面选择首终批准")
                        .setPositiveButton("确定", DialogInterface.OnClickListener { dialog, which ->
                            ActivityCompat.requestPermissions(this,
                                    arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION),
                                    200)
                        }).create().show()
            }

       }
    } else {
        if (applicationInfo.targetSdkVersion  Build.VERSION_CODES.R){
            //申请前台和后台位置权限
            ActivityCompat.requestPermissions(this,
                    arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION),
                    100)
        }else{
            //申请前台位置权限
            ActivityCompat.requestPermissions(this,
                    arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
                    100)
        }
    }
柔件包可见性 ? Android 11 更改了行使查询用户已在设备上装配的其他行使以及与之交互的手段。行使新的 元素,行使能够定义一组自身可访问的其他行使。经由过程告知体系答向您的行使表现哪些其他行使,此元素有助于鼓励最幼权限原则。此外,此元素还可协助 Google Play 等行使商店评估行使为用户挑供的隐私权和坦然性。

也就是说,Android11中,倘若你想去获取其他行使的新闻,比如包名,名称等等,不克直接获取了,必须在清单文件中增补元素,告知体系你要获取哪些行使新闻或者哪一类行使。

比如吾这段查询行使新闻的代码:

val pm = this.packageManager
    val listAppcations: ListApplicationInfo> = pm
            .getInstalledApplications(PackageManager.GET_META_DATA)
    for (app in listAppcations) {
        Log.e("lz",app.packageName)
    }

在Android11版本,只能查询到本身行使和体系行使的新闻,查不到其他行使的新闻了。怎么呢?增补元素,两栽手段:

1)元素中添入详细包名

manifest package="com.example.game">
    queries>
        package android:name="com.example.store" />
        package android:name="com.example.services" />
    queries>
    ...
manifest>

1)元素中添入固定过滤的intent

manifest package="com.example.game">
    queries>
        intent>
            action android:name="android.intent.action.SEND" />
            data android:mimeType="image/jpeg" />
        intent>
    queries>
manifest>

能够还是有人会疑心,那吾的行使是涉猎器或者设备管理器咋办呢?吾就要获取一切包名啊? 坦然,Android11还引入了 QUERY_ALL_PACKAGES 权限,清单文件中添入即可。但是Google Play可纷歧定能滥用哦,它为必要QUERY_ALL_PACKAGES 权限的行使会挑供相关指南,但是还没出来,详细要望后面的新闻了。

至于国内市场。。。(期待能有个行使市场金瓯无缺益益管理这紊乱的市场吧!)

文档访问控制 为让开发者未必间进走测试,以下与存储访问框架 (SAF) 相关的变更只有在行使以 Android 11 为现在的平台时才会成绩。

上文存储的时候说过能够经由过程SAF(存储访问框架--Storage Access Framework)来访问公共现在录,但是Android11再次升级,片面现在录和文件不克访问了,详细如下:

无法再行使 ACTION_OPEN_DOCUMENT_TREE intent 操作乞求访问以下现在录: 内部存储卷的根现在录。 设备制造商认为郑重的各个 SD 卡卷的根现在录,不论该卡是模拟卡还是可移除的卡。郑重的卷是指行使在大无数情况下能够成功访问的卷。 * Download 现在录。

无法再行使 ACTION_OPEN_DOCUMENT_TREE 或 ACTION_OPEN_DOCUMENT intent 操作乞求用户从以下现在录中选择单独的文件: Android/data/ 现在录及其一切子现在录。 Android/obb/ 现在录及其一切子现在录。

控制对 APN 数据库的读取访问 以 Android 11 为现在的平台的行使现在必须具备 Manifest.permission.WRITE_APN_SETTINGS 特权,才能读取或访问电话挑供程序 APN 数据库。倘若在不具备此权限的情况下尝试访问 APN 数据库,会生成坦然变态。

题目来了,APN是啥? * 指一栽网络接入技术,是经由过程手机上网时必须配置的一个参数,APN配置参数包括名字,运营商编号,APN接入点等等。

就是说倘若异国Manifest.permission.WRITE_APN_SETTINGS权限就不克读取APN数据库了,但是!这个权限很早之前就被限定只有体系程序才能申请这个权限了,现在这个特权没理解到是什么意思,难道体系程序都不克随意申请了?有大神能够评论区留言告知。

在元数据文件中声明“无窒碍”按钮行使情况 从 Android 11 最先,您的无窒碍服务无法在运走时声明与体系的“无窒碍”按钮的相关。倘若您将 AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON 附添到 AccessibilityServiceInfo 对象的 flags 属性,框架就不会将“无窒碍”按钮回调事件传递给您的服务。

做过无窒碍辅助功能的答该都晓畅AccessibilityServiceInfo要竖立flag为FLAG_REQUEST_ACCESSIBILITY_BUTTON,getAccessibilityButtonController手段获取辅助功能按钮控制器,并且可用于查询辅助功能按钮的状态并注册监听器以进走交互和辅助功能按钮的状态更改。

但是,Android 11最先,云云写不克获取辅助按钮回调事件了,得换成另外一栽写法。在元数据文件(清淡为 res/raw/accessibilityservice.xml)中行使 flagRequestAccessibilityButton 标记声明您的无窒碍服务与“无窒碍”按钮的相关。

Firebase JobDispatcher 和 GCMNetworkManager 倘若您的行使以 API 级别 30 或更高级别为现在的平台,在搭载 Android 6.0(API 级别 23)或更高版本的设备上会停用 Firebase JobDispatcher 和 GcmNetworkManager API 调用。

这两个api国内都用不了,主要用于后台义务。官方给出的替代偏见是WorkManager,这个国内是能够用的,属于jetpack组件,主要用于调度和实走可延期的后台做事。

设备到设备文件传输 倘若您的行使以 Android 11 为现在的平台,您将无法再行使 allowBackup 属性停用行使文件的设备到设备迁移。体系会自动启用此功能。不过,即使您的行使以 Android 11 为现在的平台,您也能够经由过程将 allowBackup 属性竖立为 false 来停用行使文件的云端备份和恢复。

android:allowBackup属性 * 代外是否批准行使参与备份和恢复基础架构。倘若将此属性设为 false,则永久不会为该行使实走备份或恢复,即使是采用整体系备份手段也不破例(这栽备份手段清淡会经由过程 adb 保存一切行使数据)。此属性的默认值为 true。

因而这边是不克停用文件的设备到设备迁移,但是能够停用云端备份和恢复

自动重置权限 倘若行使以 Android 11 为现在的平台并且数月未行使,体系会经由过程自动重置用户已赋予行使的运走时敏感权限来珍惜用户数据。此操作与用户在体系竖立中查望权限并将行使的访问权限级别更改为拒绝的做法效率相通。倘若行使已按照相关在运走时乞求权限的最佳做法,那么您不消对行使进走任何更改。这是由于,当用户与行使中的功能互动时,您答该会验证相关功能是否具有所需权限。

官方表明说的很明了了,而且只要行使按照相关在运走时乞求权限的最佳做法,也就是每次必要调用权限的时候都会去判定,那么就不会有什么题目。

倘若必要关闭这个功能怎么办呢?只有引导用户去竖立页面关闭了,能够调用包含Settings.ACTION_APPLICATION_DETAILS_SETTINGS action的 Intent将用户定向到体系竖立中行使的页面。

怎么检查行使是否停用自动重置功能呢?调用 PackageManager的isAutoRevokeWhitelisted()手段。倘若此手段返回 true,代外体系不会自动重置行使的权限。

前台服务类型 从 Android 9 最先,行使仅限于在前台访问摄像头和麦克风。为了进一步珍惜用户,Android 11 更改了前台服务访问摄像头和麦克风相关数据的手段。倘若您的行使以 Android 11 为现在的平台并且在某项前台服务中访问这些类型的数据,您必要在该前台服务的声明的 foregroundServiceType 属性中增补新的 camera 和 microphone 类型。

在Android10的时候,对于前台定位服务就必须添上android:foregroundServiceType="location",现在Android11上又增补了两个权限控制,一个是摄像头一个是麦克风。

因而总结下来就是,行使某项前台服务必要访问位相新闻、摄像头和麦克风,那么就要在清单文件中云云增补:

manifest>
    service ...
        android:foregroundServiceType="location|camera|microphone" />
manifest>

有的朋友能够测试发现,不添foregroundServiceType的前挑下,让Activity启动了一个前台服务,并在服务里去获取定位,竟然能够获取到定位新闻,难道官方说错了?

其实这是由于你并异国让前台服务单独运走,你能够试着在Activity启动Service后,进入Home界面,然后过几秒再乞求位置,就乞求不到了。但是不会休业,由于这个被体系竖立的权限类别为MODE_IGNORED,也就是静默战败模式。

因而为了保险首见,只要前台服务涉及到了这三个功能,就在清单文件添上android:foregroundServiceType

适配Android11手机

此模块的修改内容针对一切项现在在Android11手机上存在的改动,与targetSdkVersion无关。

数据访问审核 ? 为了让行使及其倚赖项访问用户私密数据的过程更添透明,Android 11 引入了数据访问审核功能。借助此流程得出的见解,您能够更益地识别和纠正能够展现的不料数据访问。

哪些周围属于用户私密数据呢?其实就是危险权限的调用,因而这个功能就是挑供了能够监听危险权限调用的监听。主要涉及到的手段是AppOpsManager.OnOpNotedCallback。不论是行使本身,还是倚赖库或者SDK中的代码,只要访问到私密数据(危险权限),都会回调给吾们。

对于工程重大或者行使较多SDK的工程比较正当用上这个功能,让本身行使的私有数据管理更添透明规范,否则对于私有数据的行使和管理并不周详和方便。而且还能够对权限行使增补归因,也就是一个tag,标志权限用到了什么地方。方便回调的时候知晓那里行使了私有数据。

来:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test1)

        //创建归因(attribute)  
        attributionContext = createAttributionContext("shareLocation")

        //监听事件
        val appOpsCallback = object : AppOpsManager.OnOpNotedCallback() {
            private fun logPrivateDataAccess(
                    opCode: String, attributionTag: String, trace: String) {
                Log.i(TAG, "Private data accessed. " +
                        "Operation: $opCoden " +
                        "Attribution Tag:$attributionTagnStack Trace:n$trace")
            }

            override fun onNoted(syncNotedAppOp: SyncNotedAppOp) {
                syncNotedAppOp.attributionTag?.let {
                    logPrivateDataAccess(syncNotedAppOp.op,
                            it,
                            Throwable().stackTrace.toString())
                }
            }

            override fun onSelfNoted(syncNotedAppOp: SyncNotedAppOp) {
                syncNotedAppOp.attributionTag?.let {
                    logPrivateDataAccess(syncNotedAppOp.op,
                            it,
                            Throwable().stackTrace.toString())
                }
            }

            override fun onAsyncNoted(asyncNotedAppOp: AsyncNotedAppOp) {
                asyncNotedAppOp.attributionTag?.let {
                    logPrivateDataAccess(asyncNotedAppOp.op,
                            it,
                            asyncNotedAppOp.message)
                }
            }
        }

        //开启私密数据监听
        val appOpsManager =
                getSystemService(AppOpsManager::class.java) as AppOpsManager
        appOpsManager.setOnOpNotedCallback(mainExecutor, appOpsCallback)

        btn1.setOnClickListener {
            getLocation()
        }
    }

    fun getLocation() {
        val locationManager = attributionContext.getSystemService(
                LocationManager::class.java) as LocationManager
        if (!checkPermission()) {
            return
        }
        val location: Location? = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
        if (location != null) {
            showToast("${location.latitude}")
        }
    }

该例子主要展现了一个获取位相新闻的功能,倘若调用到getLocation手段,就会触发onNoted回调,回调新闻包括危险权限code以及归因。

其中OnOpNotedCallback 统统三个回调手段: onNoted 平常情况下都会回调到该手段 onAsyncNoted 倘若数据访问并非发生在行使调用API期间,就会调用onAsyncNoted(),比如一些监听器的回调。 * onSelfNoted 在极幼批情况下,倘若行使将自身的UID传递到 noteOp(),必要调用 onSelfNoted()。

末了点击按钮,望下回调的终局日志:

Private data accessed. Operation: android:coarse_location
     Attribution Tag:shareLocation
    Stack Trace:
    [Ljava.lang.StackTraceElement;@14f5a16

能够望到权限代码:android:coarse_location 以及归因 shareLocation

单次授权 在 Android 11 中,每当行使乞求与位相新闻、麦克风或摄像头相关的权限时,面向用户的权限对话框会包含仅限这一次选项。倘若用户在对话框中选择此选项,体系会向行使赋予一时的单次授权。

浅易的说,就是在申请与位相新闻、麦克风或摄像头相关的权限时,体系会自动挑供一个单次授权的选项,只供这一次权限获取。然后用户下次掀开app的时候,体系会再次挑示用户赋予权限。这个影回响反映该不大,只要吾们每次行使的时候都去判定权限,异国就去申请即可。放一张新版本权限获取样式:

权限对话框的可见性 Android 11 提出不要乞求用户已选择拒绝的权限。在行使装配到设备上后,倘若用户在行使过程中频繁针对某项特定的权限点按拒绝,此操作外示其期待“不再咨询”。

这个都算不上改动,只是官方的一个良益提出。提出在用户多次拒绝之后,不要再展现权限申请。

Scudo Hardened Allocator Android 11 在内部行使 Scudo Hardened Allocator 为堆分配挑供服务。Scudo 能够检测并减轻某些类型的内存坦然违规走为。倘若您在原生代码休业报告中发现与 Scudo 相关的休业(例如 Scudo ERROR:),请参阅 Scudo 题目排查文档。

Scudo是一栽动态的用户模式内存分配器,旨在招架与堆相关的漏洞,同时保持良益的性能。它是一个开源的项现在。 Android 11中,将采用这个新的heap分配器,性能更益,更坦然。

文件描述符排错程序 Android 10 引入了 fdsan(文件描述符排错程序)。fdsan 检测舛讹处理文件描述符一切权的舛讹,例如 use-after-close 和 double-close。在 Android 11 中,fdsan 的默认模式发生了转折。现在,fdsan 会在检测到舛讹时休止,而以前的走为则是记录警告并不息。

题目来了,fdsan是啥?先要晓畅fd是啥

文件描述符(FileDescriptor) 是Unix/Linux体系文件操作的相关概念,它在式样上是一个非负整数。当程序掀开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。 体系的进程也就是行使了这个fd来标示掀开的文件,有了它就能对文件做各栽操作,获得文件的各栽相关新闻了。

因而fdsan也就是检测文件处理中发生的一些舛讹。

行使行使情况统计新闻 为了更益地珍惜用户,Android 11 将每个用户的行使行使情况统计新闻存储在凭据添密存储空间中。

这就涉及到了UsageStatsManager,UsageStatsManager是Android挑供统计行使行使情况的服务。经由过程这个服务能够获取指准时间区间内行使行使统计数据、组件状态转折事件统计数据以及硬件配相新闻统计数据。

比如queryAndAggregateUsageStats手段,能够获取指准时间区间内行使统计数据,以行使包名为键值进走数据相符并。

但是在Android 11 设备中,不善心理,不克肆意行使这些新闻了。只有当isUserUnlocked()手段返回true的时候,才能平常访问这些数据。也就是以下两栽情况: 用户在体系启动后首次解锁其设备 用户在设备上切换到本身的帐号

JobScheduler API 调用控制调试

JobScheduler义务调度器,能够在设备余暇时做一些义务处理。Android11中倘若你竖立为debug模式(debuggable 清单属性竖立为 true),超出速率控制的JobScheduler API调用将返回 RESULT_FAILURE。这个有什么用呢?答该能够协助吾们发现一些性能题目,感趣味的能够本身试试。

趁便挑下,Jetpack组件WorkManager也是用到了JobScheduler,不熟识的同学能够去晓畅下,JobScheduler是由SystemServer进程启动的一个体系服务,因而才能够有这么大的权限。

无窒碍操作 在以前的 Android 版本中,框架会向未正确处理基于点击的无窒碍操作的微件分派触摸事件。清淡,这些视图会直接处理触摸事件,而不是注册点击监听器。 为了在正确定义无窒碍操作的行使中创建更相反的走为,Android 11 绝不会分派触摸事件。相逆,体系会十足倚赖于基于点击的无窒碍操作:ACTION_CLICK 和 ACTION_LONG_CLICK。此更改会影响屏幕涉猎器的走为。

在Android手机上有个预装配的屏幕涉猎服务,叫做TalkBack,为视力窒碍人士或者视力状态欠安的晚年人挑供。那吾们行使为了让这个涉猎器能够读懂你的自定义view操作,必须授与自定义控件定义处理程序,包括点击,长按等操作。正本版本能够对于OnTouchListener也声援无窒碍触摸事件,而在Android11中,必须特意制定点击或者长按事件才走了。给个 :

class TriSwitch(context: Context) : Switch(context) {
    // 0, 1, or 2.
    var currentState: Int = 0
        private set

    init {
        updateAccessibilityActions()
    }

    private fun updateAccessibilityActions() {
        ViewCompat.replaceAccessibilityAction(this, ACTION_CLICK,
            action-label) {
            view, args -> moveToNextState()
        })
    }

    private fun moveToNextState() {
        currentState = (currentState + 1) % 3
    }
}

一个自定义控件TriSwitch,继承自Switch,由于和Switch的点击效率纷歧样,因而必须经由过程替换 ViewCompat.replaceAccessibilityAction() 来重新定义相答的无窒碍操作。

非SDK接口控制 Android 11 包含更新后的受控制非 SDK 接口列外(基于与 Android 开发者之间的配相符以及最新的内部测试)。在控制行使非 SDK 接口之前,吾们会尽能够确保挑供公开替代方案。

老样子,Android11也会控制一些接口,包括灰名单和白名单,详细望非SDK接口列外

总结

沿路分析下来也能够望到,倘若是主要的改动,稀奇是涉及到休业的改动还是放到了targetSdkVersion=30的内容中,这也是每次Android发版的一个潜规则吧,为了最大水平不影响已上线的app所作出的行为。 但是,这并不料味吾们就能够不改。由于行使可拖不首,用户可拖不首,毕竟升级才能给到用户最益的体验。而且各大行使市场也都会提出或者强制行使升级targetSdkVersion,以便适配最新的手机。

因而,走动吧。

附件

官网改动介绍

吾的公多号:码上积木,每天三问面试题,详细剖析,助你成为offer收割机。公多号回复“111”,能够获取面试题《思考与解答》去期期刊哦~每月更新

谢谢你的涉猎,倘若你觉得写的还走,就点个赞声援下吧!感谢! 你的一个 ,就是吾分享的动力??。

行为用户量最大的,最成熟的移动操作体系,Android比来发布了第11个版本。关于这个版本的新特性,其它答主已经说了不少,比如气泡和多媒体控件这些新的界面元素,开发者答该已经能在SDK挑供的虚拟机中体验到,它的主要改进在吾望来,是无窒碍特性以及坦然隐私方面的特性。

不过,除了这些特性上的更新以外,与开发者更互相关注的是相关工具的更新,Android Studio 4.x系列就是陪同着Android 11一首开发推出的,这些改进也实切真切的能够吸引开发者,改善开发者的效率,从各方面赋能协助开发者,这是谷歌的愿景。

一:Android开发工具的新特性。

最先,在吾们迎来了Android 11体系的更新的同时。陪同着迎来了开发工具Android Studio 4.x系列的更新,这些更新大致有哪些呢?

其中,几个月前发布的4.0版本,新添了实时的组织检视器Layout Inspector,以3D式样展现界面一切元素与层级。这是一个挺酷的功能,能够直不益看的望到组织的细节,许多人升级AS4.0最憧憬的就是这个功能。同时值得仔细的还有构建分析器Build Analyzer,用于跟踪编译过程中每个元素的占用时长,找到占用编译时间的关键路径,有针对性的协助解决编译速度题目。

4.0版本的AS许多人已经体验过了不短时间,比来已经发布的4.1版本AS,增补了数据库检视器,嵌入式模拟器,TF模型导入,内存Profiler等功能。比较特出的是对体系跟踪器的界面改进,现在能够经由过程CPU Profiler,借助vsync查望每一个表现帧的时序,从而清亮的晓畅导致表现卡顿的位置,对位置细目进走缩放,从而详细表现出那时的做事线程状态。

另外一点上风则是,它引入了IDEA 2020.1的代码,增补了一切IDEA新版本的特性,同时声援了Java14。

位于测试通道的4.2版本AS,也引入了许多界面上的改进,特性上比较新的有无窒碍功能扫描仪,扫描现在设计的界面组织对于无窒碍访问存在哪些题目;新版本还具有经由过程二维码扫码连接到长途设备进走调试的方便性功能。比较重磅的特性也许是 Jetpack Compose的声援,这是一个崭新的界面设计工具包,能够方便的在一个代码中创建多个Preview,甚至能够组织出用户可交互的Preview窗口,4.2版本的AS围绕Composable挑供了大量的更新特性。

详细的更新特性 还有更多,限于篇幅相关不克逐一介绍,有条件的能够尝试这些新版本Android Studio,倘若对测试版进走尝鲜,提出行家在本身的生产环境同时保持安详版本的IDE,多个版本的AS能够同时存在。

二:Google为开发者所做出的辛勤。

Google不息是一个显得比较酷的技术公司,许多开发人员说首Google都心生憧憬。能参添Google开发者大会不息是能够值得卖弄的资本。但海外的Google大会并不是那么容易有条件参添。随着时间的推移,Google的本地化进走得越来越完善,google.cn 也包含了越来越多的面向中国开发者的新闻,谷歌也举办了多次,面向中国开发者的谷歌开发者大会。

由于疫情因为,这是首次纯线上举走谷歌开发者大会,对普及开发者来说是个不可多得的机会。今次的线上开发者大会,走程有六天(11.16-11.21),时间相对裕如,挑供了50多场技术钻研以及对产品的行使案例展现。更多的开发者能够在做事之余直接在线不雅旁观谷歌开发者大会视频来参与。

谷歌不息辛勤期待协助开发者更益的进走开发,它的 developer.android.google.cn 国内网站已经挑供了许多开发资讯,而 AS开发环境基于成熟的IDEA平台与技术,这个平台本身声援富强的插件体系,批准全世界的开发者扩展它的功能,因而也拥有活跃的开发社区,供开发者交流。同时,基于gradle的构建机制使得开发者能够更方便的在项现在中直接引入第三方代码库,也挑供了相等多的实现各栽功能的程序包,按期召开的开发者大会也总能为新的开发倾向挑供启发。而Google Play市场,更是为开发者面向全球发布本身的行使挑供了方便的渠道。

另外一方面,谷歌开发者大会官网,还挑供了直接让开发者上手演习的代码实践,能够协助兴趣味有思想的人们更方便的尝试进走开发。详细地址在

追求发现

谷歌还特意开辟了女性开发者专题钻研会,旨在鼓励和促进女性在技术周围的参与。促进更多的女性开发者,女性设计师,科技型女企业家的成长与升迁。

Google 女性开发者做事发展会谈会

三:Android 11在无窒碍与隐私方面的新特性。

相关Android 11,与开发者亲昵相关的,其实是无窒碍以及隐私方面的内容,毕竟,这些最后都必要靠普及开发者适配。高版本的隐私适配清淡请求越来越厉格,行使程序适配会是个挑衅,片面项现在选择了暂缓适配。谷歌挑供了新工具与各栽例子,旨在协助开发者更益的适配新版本,升迁行使私密性于安详性,吾比较仔细的隐私改进有这些:

柔件包可见性,对查望其它已经装配的柔件包进走控制,现在行使无法望到通盘的其它行使,无法完善的获取「你装配了哪些行使」这栽隐私。递添式(渐进式)权限申请,例如后台权限必须在前台权限申请并经由过程以后才能乞求,不批准在一最先直接或者同时申请更高级别权限。访问位置,相机,与麦克风时,必须声明相符理的理由。行使程序必须位于前台,或者具备前台服务属性才能访问片面敏感新闻,避免后台偷偷获取。舍用不可重置标识符,IMEI,Sim卡,IccId等不可重置的标识符将必要更高权限才能访问,平台挑供了一些其它的具备唯一性的标识符给行使行使。并且给出了相关的最佳实践案例。自动重置,倘若用户很长时间未行使,将重置相关权限,再次启动时app必要重新申请。强制分区存储,Android 10的分区存储在Android 11中会变成强制实走,行使在公共区域只能读写指定类型的媒体。自然,有大量的传统代码,尤其是NDK代码,依然基于传统的基于路径的文件API,这会造成移植的难得。在Android 11中,对基于路径的文件的API调用都将被转化为对MediaStoreAPI的访问,使得最后一切的共享文件读写都基于MediaStoreAPI,如此一来,一片面旧代码在新版本中编译后会直接适配新的文件管理体系。而且一切公共文件读写都基于MediaStoreAPI之后,能够升迁体系级的索引速度,查找文件更快。

倘若对这方面感趣味,能够考虑陈卓的主题演讲「为您的行使适配Android 11的隐私变更」。 无窒碍技术不光仅只是表现人文关怀的方面,原形上,无窒碍技术包含了各栽方面切实保可访问性的技术,并非仅仅只限于存在身体窒碍的用户。

谷歌对于行家打造更高可访问性行使给了一些提出,例如确保网站的可访问性,采纳CDN添速,减幼不消要的媒体添载,行使前向缓存技术,预防分布式拒绝服务抨击;例如确保能够方便的行使读屏器,方便视障人士经由过程语音涉猎来行使;又例如批准按键访问,方便重度肢残用户只用一两个外接按钮来控制,批准界面元素的放大以及对比度调节,界面元素具备相符逻辑的tab挨次。焦点的设定相符理。标签的命名相符理。

只行使触屏手段来测试的开发者能够难以认识到以上这些题目对无窒碍特性造成的影响。新版本Android Studio中的无窒碍功能扫描仪能够会对检测这些题目有必定协助。 除了面向开发者,还有一些自力的行使能够更益的协助有窒碍用户访问设备,例如Lookout2.0行使,它能够行使摄像头识别出大无数常见物体,协助盲人识别出身边的情况,还能够协助盲人涉猎文档,迅速涉猎。又比如Action Blocks能够协助用户定义一系列可触发的图标迅速卡片,能够更方便的访问可访问性功能。还有随选随读功能,能够在照相或者涉猎相册时直接选择图片中的文字进走光学字符识别,一片面闲谈柔件也内嵌了声援盲文键盘的输着手段,不必要购买腾贵的盲文输入硬件。 为了让手语用户更益的参添视频会议,还开发了手语识别的功能,实时的检测手语用户的完善身体姿势,并且翻译手语为可涉猎说话,使得手语用户更益的同其它用户进走视频会议。这个特性也是个特意酷的思路。 Google无窒碍团队的工程师钟昱有一场关于无窒碍相关的演讲「Android 无窒碍更新与发布」,兴趣味的能够参考参考。 另外还有几个演讲也有些意思,例如 Dan 的 Android 11 体系 UI 最新解读,Jeffery 的 行使 Kotlin 开发 Android 行使的最新动态 ,吴晓岛的 更益地在 Android TV 上开发行使 ,Adriana Jara 的 基于 Chrome OS 体系的 Android 开发 。能够参见大会官网来获守新闻。

末了

大会官网的地址是:

Google 开发者大会全线上表现!快和吾一首来发现“代码不止”的无限能够!

吾觉得挺不错,原形上谷歌近年来制作了许多面向中国开发者的本地化内容,android developer站点也在 developer.android.google.cn 中有直接可访问的镜像。

为了方便手机用户获守新闻,他们还特意贴心的竖立了微信公多号:谷歌开发者。

附大会日程:

2020年大会日程:不息6天的线上科技盛会

11月12-15日:大会预炎11月16日:大会揭幕,主题演讲(keynote)11月17日:Android,Google Play,Chrome OS 技术演讲11月18日:Flutter,Web,Material Design 技术演讲11月19日:TensorFlow 技术演讲,谷歌技术多样性、公平性和容纳性演讲11月20日:Google Cloud ,Assistant ,谷歌出海产品技术演讲11月21日:谷歌艺术与文化,ARCore,Wear OS 技术演讲;大会终结

后台管理,照样一直垃圾10的主页只有一个义务,你敢想象6寸多的屏幕后台只有一个卡片,曾经的堆叠还有3个,现在切换一个柔件必要滑的手抽筋,mdzz,巨难用


Powered by 9游会官网 @2018 RSS地图 HTML地图

Copyright 365建站 © 2013-2021