设为首页 加入收藏

TOP

Android 13 新特性及适配指南(二)
2023-07-23 13:31:10 】 浏览:92
Tags:Android
应用:
在显示Android通知栏时,一方面需要在AndroidManifest中声明 android.permission.POST_NOTIFICATION,另一方面代码中需动态申请该通知栏权限。
<!-- AndroidManifest权限声明 -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xiaxl.test">
	
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
</manifest>


// Java代码动态申请POST_NOTIFICATIONS权限
if (Build.VERSION.SDK_INT >= 33) {
    int checkPermission =
            ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS);
    if (checkPermission != PackageManager.PERMISSION_GRANTED) {
        //动态申请
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{
                Manifest.permission.POST_NOTIFICATIONS}, PERMISSION_REQUEST_CODE);
    } else {
        //showRecordNotification();
    }
} else {
    //showRecordNotification();
}

POST_NOTIFICATIONS 动态授权申请弹窗如下图所示:
POST_NOTIFICATIONS动态授权弹窗

  • 对于以Android12(API 32-)为目标平台的应用
    对于以API 32-为目标平台的应用,运行在Android13及以上设备中时,当应用第一次显示通知时,系统会自动弹出以下提示框,要求用户动态授权

以Android12(API 32-)为目标平台的应用,首次显示通知时,弹窗提醒

官方参考:
Android Developer 通知运行时权限官方介绍:
https://developer.android.google.cn/guide/topics/ui/notifiers/notification-permission

五、Wi-Fi 权限

从Android 13开始,Android系统新增了NEARBY_WIFI_DEVICES权限,将原有的ACCESS_FINE_LOCATION权限 与 Wi-Fi能力使用进行了区分(避免早先开发者使用Wi-Fi能力时,需要请求用户位置权限,从而引起用户的歧义)。

NEARBY_WIFI_DEVICES权限

从Android 13开始,开发者只要不通过Wi-Fi推导用户的物理位置将无需再请求 ACCESS_FINE_LOCATION 权限,同时官方总结了新增权限NEARBY_WIFI_DEVICES的如下使用场景:

NEARBY_WIFI_DEVICES权限使用场景

官方参考:
Android Developer NEARBY_WIFI_DEVICES:
https://developer.android.google.cn/reference/android/Manifest.permission#NEARBY_WIFI_DEVICES

六、剪切板内容隐藏

从Android 13(API 33)开始,Android剪切板新增了一项新API
Android 13(API 33)开始,用户可以选择使用API PersistableBundle#(ClipDescription.EXTRA_IS_SENSITIVE, true)隐藏要复制到剪切板的用户账户、密码登敏感信息。

相关API使用举例如下:

private void addData2Clipboard() {
    ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clipData = ClipData.newPlainText("111111", "我是密码");
    ClipDescription description = clipData.getDescription();
    // 隐私内容:剪切板加密
    PersistableBundle persistableBundle = new PersistableBundle();
    if (Build.VERSION.SDK_INT >= 33) {
        persistableBundle.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true);
    } else {
        persistableBundle.putBoolean("android.content.extra.IS_SENSITIVE", true);
    }
    description.setExtras(persistableBundle);
    // 剪切板添加加密内容
    clipboardManager.setPrimaryClip(clipData);
}

不使用新API使用新API隐藏敏感信息,剪切板前后对比如下所示:

剪切板内容隐藏API使用效果

七、身体传感器后台权限

从Android 13开始,以Android13(API 33+)为目标平台的应用,在后台访问身体传感器(例如心率、体温和血氧饱和度)时,除了需要请求现有的 BODY_SENSORS 权限外,还需要请求 BODY_SENSORS_BACKGROUND 权限。

身体传感器后台权限

官方参考:
Android Developer BODY_SENSORS_BACKGROUND:
https://developer.android.google.cn/reference/android/Manifest.permission#BODY_SENSORS_BACKGROUND

八、非 SDK 接口限制

官方从 Android 9(API 级别 28)开始,逐步开始对应用使用的非 SDK 接口实施了限制。
如果你的APP通过引用非 SDK 接口或尝试使用反射或 JNI 来获取句柄,这些限制就会起作用。官方给出的解释是为了提升用户体验、降低应用崩溃风险

8.1、非SDK接口检测工具

官方给出了一个检测工具,下载地址:veridex
https://android.googlesource.com/platform/prebuilts/runtime/+archive/master/appcompat.tar.gz

veridex使用方法:

appcompat.sh --dex-file=apk.apk

veridex检测截图

8.2、blacklist、greylist、greylist-max-o、greylist-max-p含义

以上截图中,blac

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇以开发之名|线上家装新美学——梦.. 下一篇uni-app如何实现USB插入后自动弹..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目