标签: android-13

Android 13 - 如何请求 WRITE_EXTERNAL_STORAGE

我的 Android 应用程序的目标版本是 Android 13 (API 33)

WRITE_EXTERNAL_STORAGE 权限似乎在 API 33(即 Android 12 及以下版本)下运行良好,但在 Android 13 上运行应用程序时,不会出现 WRITE_EXTERNAL_STORAGE 的运行时权限弹出窗口。

我的 Android 应用程序在应用程序的私有存储中创建一个密钥库文件。

Android 13 的行为更改提到了这一点:

如果您的应用以 Android 13 为目标平台,则必须请求一项或多项新权限,而不是 READ_EXTERNAL_STORAGE。

新的权限是:

  • 图片和照片:READ_MEDIA_IMAGES
  • 视频:READ_MEDIA_VIDEO 音频
  • 音频文件:READ_MEDIA_AUDIO

我在官方文档中没有找到任何关于此的信息。该文档仅关注媒体文件,没有提及其他文件类型。

https://developer.android.com/about/versions/13/behavior-changes-13#capsular-media-permissions

android android-manifest android-permissions runtime-permissions android-13

80
推荐指数
1
解决办法
11万
查看次数

Android 13 - READ_EXTERNAL_STORAGE_PERMISSION 仍然可用

Android 13 的行为更改提到了这一点:

如果您的应用面向 Android 13,则必须请求一项或多项新权限,而不是 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限。

https://developer.android.com/about/versions/13/behavior-changes-13#capsular-media-permissions

新的权限是:

  • 图片和照片:READ_MEDIA_IMAGES
  • 视频:READ_MEDIA_VIDEO 音频
  • 音频文件:READ_MEDIA_AUDIO

但是,如果我需要从任意文件夹读取 PDF 文件,该如何处理?没有像 READ_MEDIA_DOCUMENT 之类的权限。那么除图像、视频或音频之外的其他文件类型呢?我仍然可以对它们使用 READ_EXTERNAL_STORAGE 权限吗?

我在官方文档中没有找到有关此内容的任何信息,但说实话,该文档仅关注媒体文件,没有任何有关其他文件类型的信息(https://developer.android.com/about/versions/13/行为更改13#细粒度媒体权限)。

我也不确定除视频、图像和音频之外的其他文档类型的 WRITE_EXTERNAL_STORAGE 权限。

android android-permissions android-13

73
推荐指数
2
解决办法
11万
查看次数

在应用程序清单中设置 'android:enableOnBackInvokedCallback="true"' 中,未为应用程序启用 OnBackInvokedCallback 作为警告

我正在运行 Android 应用程序“Android-13”,在 Logcat 中我看到此警告,如何解决此问题?

OnBackInvokedCallback is not enabled for the application.
Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
Run Code Online (Sandbox Code Playgroud)

android-gesture gesture-navigation android-13

49
推荐指数
1
解决办法
7万
查看次数

为什么Android 13删除了前台服务通知?

抱歉,这种标题是吸引点击的标题;我想不出更简洁的方式来表达它。

在 Android 13 中,如果用户未授予“危险”POST_NOTIFICATION权限,则前台服务通知不会显示在通知抽屉中。相反,为了让用户看到它,他们必须导航到新的前台服务任务管理器,根据文档

如果用户拒绝通知权限,他们仍然会在前台服务 (FGS) 任务管理器中看到与这些前台服务相关的通知,但不会在通知抽屉中看到它们。

现在我还没有使用过 Android 13 Beta,所以我不知道当前台服务运行时 FGS 任务管理器到底会是什么样子,但我认为强制前台服务发出通知的全部意义在于以便用户知道应用程序何时运行。这甚至会产生安全后果,因为 Android 限制了后台进程与前台进程可以使用危险权限(例如ACCESS_BACKGROUND_LOCATION)执行的操作。此更改本质上允许应用程序使用基于前台的权限,而无需明确通知用户。

那么,他们为什么决定限制前台服务通知呢?我的意思是,首先还有关于添加限制通知的其他讨论。但有人会认为,如果 Android强制您使用通知,那么就不应该有办法绕过它(即从不请求权限POST_NOTIFICATION,甚至只是以编程方式删除权限)。

android android-notifications foreground-service android-13

32
推荐指数
2
解决办法
2万
查看次数

Android API 33 权限未授予

因此,当我在developer.android 站点中读到时,它Android 13在“权限”字段中带来了新的更改。

我有一个聊天应用程序,我需要拨打电话、打开相机、录制音频、在外部存储中读取和写入。因此,在 SplashScreen 中,我向用户请求这些权限。然而,其中一些没有被授予,但甚至系统也没有向我索要这些。

AndroidManifest.xml这是我在文件中声明的内容

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature
        android:glEsVersion="0x00020000" …
Run Code Online (Sandbox Code Playgroud)

android runtime-permissions android-tiramisu android-13

22
推荐指数
2
解决办法
6万
查看次数

禁用通知权限后启动前台服务导致崩溃(Android 13)

因此,我一直在尝试新的 Android 模拟器(即 Android 13 或 Android Tiramisu,API 33),并且在应用程序上,我需要一个前台服务。

该应用程序的目标 SDK 目前为 33。

由于通知要求,我已将其添加android.permission.POST_NOTIFICATIONS到清单中。而且,因为它也是运行时权限,所以我在打开应用程序后请求权限。

如果用户拒绝该权限,但在使用 启动前台服务后尝试执行涉及前台服务的任务startForegroundService,则在从我的服务调用时startForeground,我会崩溃:

android.app.RemoteServiceException$CannotPostForegroundServiceNotificationException: Bad notification for startForeground
        at android.app.ActivityThread.throwRemoteServiceException(ActivityThread.java:1983)
        at android.app.ActivityThread.-$$Nest$mthrowRemoteServiceException(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2242)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Run Code Online (Sandbox Code Playgroud)

请注意异常名称:CannotPostForegroundServiceNotificationException。显然,系统有效地阻止了我发布前台服务通知。这种情况发生在startForeground使用有效通知进行调用之后(无论如何,直到 API 32,并且我没有看到 API 32 和 API 33 之间用于构造通知本身的更改,此外setOngoing(true)这是我已经在做的事情)。

因此,我检查了是否可以使用NotificationManager.areNotificationsEnabled(). 如果用户按预期拒绝该权限,则返回 false。代码现在如下所示:

if (mNotificationManager.areNotificationsEnabled())
    startForeground(123, mNotificationBuilder.build())
Run Code Online (Sandbox Code Playgroud)

并且,正如预期的那样,startForeground没有被调用。但是,需要执行的任务可能很长(可能大约2分钟)并且必须在后台执行,这不能在作业中或通过 执行WorkManager,并且如果不调用startForeground …

android android-notifications android-permissions android-13

20
推荐指数
1
解决办法
1万
查看次数

Android 13 不请求 POST_NOTIFICATIONS 权限

我的应用程序想要发送通知,但Android 33中添加的新权限默认被拒绝,不知何故Android在尝试创建通知通道时不会自动提示用户。我有什么遗漏的吗?如果没有,我如何(以及何时)请求许可?

permissions notifications android android-13

18
推荐指数
4
解决办法
4万
查看次数

android 在发布版本中添加 DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

使用 api 级别 33 构建我的应用程序后,android 正在合并清单中添加新权限

    <permission android:name="com.my.package.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" android:protectionLevel="signature"/>
    <uses-permission android:name="com.my.package.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
Run Code Online (Sandbox Code Playgroud)

我有一个广播接收器,这个权限与此有什么关系吗?我应该更改任何代码吗?有谁知道添加此内容的原因吗?

        <receiver android:enabled="true" android:exported="true" android:name="com.my.package.EventReceiver">
            <intent-filter>
                <action android:name="com.my.package.event"/>
            </intent-filter>
        </receiver>
```
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-permissions android-13

15
推荐指数
1
解决办法
2万
查看次数

Android 13 AD_ID 声明 - Play 管理中心无法识别

在面向 Android 13 (SDK 33) 的 Android 应用中,我已在应用清单中声明了所需的 AD_ID 权限:

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

但是,当我将应用程序上传到播放控制台以进行发布时,会弹出以下错误,建议我需要声明权限。

Error
Your declaration on Play Console says that your app uses advertising ID. Your manifest file doesn't include the com.google.android.gms.permission.AD_ID permission.

If you don't include this permission in your manifest file, your advertising identifier will be zeroed out. This may break your advertising and analytics use cases, and cause loss of revenue. Learn more

You can remove these errors by updating your advertising ID declaration

info_outline
Apps …
Run Code Online (Sandbox Code Playgroud)

android google-play android-13

12
推荐指数
0
解决办法
1268
查看次数

Android 13 对待视频和图像权限是否相同?

Android 13 有一个名为 \xe2\x80\x9cGranular Media Permissions\xe2\x80\x9d 的新功能(https://developer.android.com/about/versions/13/behavior-changes-13#capsular-media-permissions)。

\n

我和我的团队正在努力确保我们为 Android 应用程序请求正确的权限,该应用程序可以(在两个不同的工作流程中)利用用户\xe2\x80\x99s 照片或用户\xe2\x80\x99s 视频。因此,我们\xe2\x80\x99编写了一些代码来请求视频工作流程的新 READ_MEDIA_VIDEO 权限,并编写了一些代码来请求照片工作流程的新 READ_MEDIA_IMAGES 权限。

\n

我困惑的是为什么app\xe2\x80\x99s设置页面仍然只显示\xe2\x80\x9cApp权限\xe2\x80\x9d(照片和视频)下的一项权限?\xe2\x80\x99 不应该显示两个权限 \xe2\x80\x94 一个用于照片,一个用于视频?

\n

同样,当我们请求两个权限之一时,用户实际看到权限对话框时,该对话框只是为用户提供了授予 \xe2\x80\x9cPhotos 和视频\xe2\x80\x9d 权限的选项。如果权限应该是细粒度的,但它们都向应用程序授予相同的权限,我不清楚这个新功能的好处是什么。

\n

到目前为止,Google\xe2\x80\x99s 文档对此也不是很清楚。尽管链接的页面确实表明如果同时请求 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 权限,则只会出现一个对话框,但我们实际上并没有这样做。我们请求这两个权限之一,而不是两者。然而,这两个权限都列在 android 清单中。这可能是一个因素吗?

\n

先感谢您

\n

android-permissions android-13

11
推荐指数
0
解决办法
1555
查看次数