Android6.0至9.0版本适配总结

Android6.0至9.0版本适配总结

简要列举下Android6到Android9在开发中需要适配的问题,做到心中有数,用到时再去查开发文档,文章非原创,后面已黏贴引用链接。

Android6.0

Android7.xx

  • 目录被限制访问

    • 私有文件的文件权限不在放权给所有的应用,使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE进行操作将触发SercurityException,场景有SharePreference的模式
    • 传递file://URI类型的Uri,导致无法访问该路径,会触发FileUriException,可使用FileProvider解决这问题,应用场景:apk安装,拍照
    • DownloadManager不再按文件名分享私人存储的文件。COLUMN_LOCAL_FILENAME在Android7.0中被标记为depreciated,尝试在AndroidN以上版本访问该字段将触发SecurityException,可以使用ContentProvider.openFileDescriptor()来访问DownloadManager公开文件
  • APK sinature schme v2

  • 隐式广播的限制

    • ACTION_NEW_PICTUREACTION_NEW_VIDEO隐式广播无法接受和发出
    • CONNECTIVITY_ACTION静态注册广播无法收到,动态广播可以收到
    • 对于CONNECTIVITY_CHANGE广播,ConnectvityManager提供其他更健壮的API,如NetworkRequest.
  • 增加的Dozen模式
    AndroidN 对AndroidM的Dozen模式进一步增强,降低进入Dozen模式的条件,AndroidM中的条件是不插电屏幕熄灭静置一段时间,AndroidN中去掉静置的条件。另一方面Dozen模式分为两个阶段,当设备切断电源,屏幕熄灭一段时间就会进入第一阶段,切断网络连接,推迟任务和同步;如果再静置一段时间进入第二阶段,增加对维持唤醒(PowerManagerc.WakeLock)定时任务(AlarmMager)Gps和WiFi扫描的限制。

    • 在Android6.0中AlarmManager中增加两个方法setAllowWhiledle()和setExactAndAllowWhiledle()通过这两个方法可使得Alarm在Dozen模式下运行,另外使用这方法时,应用每9分钟只能唤醒一次alarm。
    • 给应用添加权限REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,并使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,系统会弹出设置窗口,用户可以直接将该应用添加到白名单中.
    Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:com.showdy.dozen"));
    startActivity(intent);
    

Android8.xx

  • 在Android 8.0之前,如果应用在运行时请求某个权限并且被授予,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一并授予该应用。对于Android8.0的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准,而不会提示用户

  • PHONE权限组新增两个权限

    • ANSWER_PHONE_CALLS:权限运行应用处理呼入电话
    • READ_PHONE_NUMBERS:权限允许应用读取设备中存储电话号码
  • Notifications适配
    方便管理通知行为和设置推出了一个新的概念:渠道和组,它允许你为要显示的每种通知类型创建自定义的类别。

  • 安装APK
    Android 8.0去除“允许未知来源”选项,需手动确认。如果我们的App具备安装App的功能,那么AndroidManifest文件需要包含REQUEST_INSTALL_PACKAGES权限,未声明此权限的应用将无法安装其他应用。我们可以选择使用。Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES这个action将用户引导至安装未知应用权限界面,同时也可以使用 packageManager.canRequestPackageInstalls()查询此权限的状态。

  • 提醒窗口
    WindowManager.LayoutParams的type设置为TYPE_SYSTEM_OVERLAY
    在4.4到6.0之前,google没有提供方法让我们用于判断悬浮窗权限,同时也没有跳转到设置界面进行开启的方法,因为此权限是默认开启的,但是有一些产商会修改它,所以在使用之前最好进行判断,以免使用时出现崩溃,判断方法是用反射的方式获取出是否开启了悬浮窗权限。在6.0以及以后的版本中,google为我们提供了判断方法和跳转界面的方法,直接使用Settings.canDrawOverlays(context)就可以判断是否开启了悬浮窗权限,没有开启可以跳转到设置界面让用户开启。
    需要配置的权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

Android9.xx

  • Android9通过下列变更简化通知渠道设置

    • 屏蔽渠道组:现在,用户可以针对某个应用在通知设置中屏蔽整个渠道组。您可以使用 isBlocked()函数确定何时屏蔽一个渠道组,从而不会向该组中的渠道发送任何通知。此外,您的应用可以使用全新的 getNotificationChannelGroup()函数查询当前渠道组设置。

    • 全新的广播 Intent类型:现在,当通知渠道和渠道组的屏蔽状态发生变更时,Android 系统将发送广播 Intent。 拥有已屏蔽的渠道或渠道组的应用可以侦听这些 Intent 并做出相应的回应。 有关这些 Intent 操作和 extra 的更多信息,请参阅 NotificationManager 参考中更新的常量列表。 有关响应广播 Intent 的信息,请参阅广播。

    • NotificationManager.Policy有3种新的“请勿打扰”优先级类别:
      PRIORITY_CATEGORY_ALARMS优先处理警报。
      PRIORITY_CATEGORY_MEDIA优先处理媒体源的声音,如媒体和语音导航。
      PRIORITY_CATEGORY_SYSTEM优先处理系统声音。

    • NotificationManager.Policy还有7种新的“请勿打扰”常量,可以用来抑制视觉中断:
      SUPPRESSED_EFFECT_FULL_SCREEN_INTENT防止通知启动全屏 Activity。
      SUPPRESSED_EFFECT_LIGHTS屏蔽通知灯。
      SUPPRESSED_EFFECT_PEEK防止通知短暂进入视图(“滑出”)。
      SUPPRESSED_EFFECT_STATUS_BAR防止通知显示在支持状态栏的设备的状态栏中。
      SUPPRESSED_EFFECT_BADGE在支持标志的设备上屏蔽标志。
      SUPPRESSED_EFFECT_AMBIENT在支持微光显示的设备上屏蔽通知。
      SUPPRESSED_EFFECT_NOTIFICATION_LIST防止通知显示在支持列表视图(如通知栏或锁屏)的设备的列表视图中。

  • 限制访问通话记录
    Android 9 引入CALL_LOG权限组并将READ_CALL_LOGWRITE_CALL_LOGPROCESS_OUTGOING_CALLS权限移入该组。 在之前的 Android 版本中,这些权限位于 PHONE 权限组。
    如果应用需要访问通话记录或者需要处理去电,则您必须向 CALL_LOG权限组明确请求这些权限。 否则会发生 SecurityException

  • 限制访问电话号码

    • 在未首先获得READ_CALL_LOG 权限的情况下,除了应用的用例需要的其他权限之外,运行于 Android 9 上的应用无法读取电话号码或手机状态。与来电和去电关联的电话号码可在手机状态广播(比如来电和去电的手机状态广播)中看到,并可通过PhoneStateListener类访问。 但是,如果没有READ_CALL_LOG权限,则 PHONE_STATE_CHANGED 广播和 PhoneStateListener 提供的电话号码字段为空。
    • 要从手机状态中读取电话号码,请根据您的用例更新应用以请求必要的权限:
      要通过PHONE_STATE Intent操作读取电话号码,同时需要READ_CALL_LOG 权限和READ_PHONE_STATE 权限。
      要从onCallStateChanged()中读取电话号码,只需要READ_CALL_LOG权限。 不需要READ_PHONE_STATE 权限。
  • 刘海屏适配

  • 对使用非SDK接口的限制和适配策略

  • Build.SERIAL 始终设置为 "UNKNOWN" 以保护用户的隐私。
    如果您的应用需要访问设备的硬件序列号,您应改为请求 READ_PHONE_STATE权限,然后调用 getSerial()。

  • 电话信息现在依赖设备位置设置
    如果用户在运行 Android 9的设备上停用设备定位,则以下函数不提供结果:

    • TelephonyManager.getAllCellInfo()
    • TelephonyManager.listen()
    • TelephonyManager.getCellLocation()
    • TelephonyManager.getNeighboringCellInfo()

参考资料:

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

推荐阅读更多精彩内容