文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android13新特性之通知权限提升

2023-09-26 07:41

关注

Android13新特性之通知权限提升

随着移动通信的高速发展,保障通信的安全性变得尤为重要。在Android 13的最新版本中,通知权限的管理得到了进一步加强。为了实现安全的通信和确保用户的隐私,必须正确申请通知权限。本文将详细探讨如何在Android 13中添加通知权限,并阐述其中的实际操作和关键细节。

1. 添加通知权限

在Android 13中,要想唤起通知,首先需要申请对应的通知权限。在应用的清单文件(AndroidManifest.xml)中添加如下代码:

<manifest ...>    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>manifest>

这样,你的应用就被赋予了显示通知的能力。

2. 动态请求权限

不仅仅是在清单文件中添加权限,还需要在显示通知之前进行动态的权限请求。以下是一个示例代码,演示了如何在动态请求权限的过程中确保用户的通知权限:

fun checkPermission() {    val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager    // 检测该应用是否有通知权限    when (manager.areNotificationsEnabled()) {        true -> {            showNotification()            Toast.makeText(this@MainActivity, "点击了通知按钮", Toast.LENGTH_SHORT).show()        }        false -> {            requestPermissionLauncher.launch(                Manifest.permission.POST_NOTIFICATIONS)        }    }}

在上述代码中,我们通过判断应用是否具备通知权限来决定是否展示通知。如果应用没有通知权限,就会触发动态请求权限的过程。

3. 用户禁止授予权限的情景

在某些情况下,用户可能会在第一次请求权限时选择禁止。此后,再次尝试动态请求权限就不会弹出请求弹窗。这时,我们只能引导用户手动开启相应的权限。

4. 权限判断

Android源码中,有一段与权限相关的判断逻辑,它控制了权限的赋予。具体代码如下:

private void grantSignatureAppsNotificationPermissions(PackageManagerWrapper pm, int userId) {    Log.i(TAG, "Granting Notification permissions to platform signature apps for user " + userId);    List<PackageInfo> packages = mContext.getPackageManager().getInstalledPackagesAsUser(            DEFAULT_PACKAGE_INFO_QUERY_FLAGS, UserHandle.USER_SYSTEM);    for (PackageInfo pkg : packages) {        if (pkg == null || !pkg.applicationInfo.isSystemApp()                || !pkg.applicationInfo.isSignedWithPlatformKey()) {            continue;        }        grantRuntimePermissionsForSystemPackage(pm, userId, pkg, NOTIFICATION_PERMISSIONS);    }}

5. 常见的通知变更

定时通知

在Android 13中,有关通知的变更主要涉及到定时通知。这方面的变更有两个主要方面:

5.1 需要精确闹钟权限

在Android 13中,想要使用精确的定时通知,需要申请以下两个权限之一:

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/><uses-permission android:name="android.permission.USE_EXACT_ALARM"/>

这两者之间的区别在于,使用SCHEDULE_EXACT_ALARM权限时,用户可以手动关闭,而使用USE_EXACT_ALARM权限时则无法手动关闭。

5.2 用户主动关闭精确闹钟权限后的处理

当用户在首次请求弹窗中选择关闭权限后,再次请求权限时将无法再次弹出请求弹窗。此时,唯一的方法是引导用户手动开启相关权限。

6. 权限判断方法

在Android源码中,有一个新的方法canScheduleExactAlarms(),用于判断应用是否具有精确时间权限。这个方法的实现如下:

public boolean canScheduleExactAlarms() {    val am = getSystemService(ALARM_SERVICE) as AlarmManager    return am.canScheduleExactAlarms()}

此方法的判断标准不仅仅包括上述两个精确时间的权限,还考虑了应用是否在节能白名单中。

总之,在Android 13中,确保应用的通知权限对于保障通信的安全性至关重要。同时,在应用中进行精确闹钟权限的判断和处理也显得尤为关键。通过合理的权限管理,可以为用户提供更安全、更稳定的通信环境。

来源地址:https://blog.csdn.net/u011897062/article/details/132404440

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯