PlayStore 不断拒绝 MANAGE_EXTERNAL_STORAGE 权限的应用程序更新,并且应用程序描述也未更新

2023-11-20

我的应用程序帮助用户管理 Whatsapp 贴纸链接到应用程序它在第一个版本中支持 SDK30,但在该版本之后,当我尝试更新新版本的应用程序 Playstore 时,我的应用程序状态被拒绝,我尝试了多次,我已经在应用程序描述甚至应用程序中提到了权限的原因在请求许可时,但我的应用程序都没有更新,我的应用程序的短描述和长描述都没有更新。 我也填写了敏感许可表,每当我尝试发布新版本时,谷歌都会发送给我

发布状态 应用程序状态: 已拒绝

由于政策原因,您的应用已被拒绝且未发布 违反。如果您提交了更新,则您的先前版本 应用程序仍然可以在 Google Play 上使用。

问题:不需要访问设备存储

您确定的功能不需要不受限制地访问 设备存储。还有其他隐私友好的访问选项 共享存储中的文件,例如使用系统文件选择器,或者, 根据使用案例,您可以遵循以下建议 从此处列出的其他应用程序接收数据。

请更新您的应用程序,以便该功能使用隐私友好型 替代方案并删除所有文件访问权限(MANAGE_EXTERNAL_STORAGE) 允许。

策略:所有文件访问权限

用户设备上的文件和目录属性被视为 个人和敏感用户数据受个人和敏感条款约束 信息政策和以下要求:

应用程序应该只请求访问至关重要的设备存储 让应用程序正常运行,并且可能不会请求访问设备存储 代表任何第三方出于与以下无关的任何目的 面向用户的关键应用程序功能。 Android 设备运行 Android“R”(Android 11)或更高版本,将需要 MANAGE_EXTERNAL_STORAGE 权限,以便管理共享中的访问 贮存。所有面向 R 或更高版本并请求广泛访问的应用程序 共享存储(“所有文件访问”)必须成功通过 发布前进行适当的访问审查。允许使用的应用程序 此权限必须明确提示用户启用“所有文件访问” 在“特殊应用程序访问”设置下查看他们的应用程序。了解更多 有关 R 要求的信息,请参阅此帮助文章。

阅读有关使用所有文件访问权限的更多信息 请参阅 Android 存储 用例和最佳实践以及如何使用存储打开文件 访问框架 在 Play Console 中解决此问题。问题:不 一个核心特征

您确定的依赖于此权限的功能不会 似乎对您的应用程序的核心功能并不重要。

核心功能被定义为应用程序的主要目的。没有 这个核心功能,应用程序被“损坏”或变得无法使用。这 核心功能,以及构成此功能的任何核心功能 核心功能,必须全部在显着位置记录和推广 应用程序的描述。

请更新您的应用程序,以便该功能不再使用此功能 许可或确保核心功能突出 在应用程序的描述中进行记录和推广,然后重新提交您的应用程序 在 Play 开发者控制台上。

策略:所有文件访问权限

用户设备上的文件和目录属性被视为 个人和敏感用户数据受个人和敏感条款约束 信息政策和以下要求:

应用程序应该只请求访问至关重要的设备存储 让应用程序正常运行,并且可能不会请求访问设备存储 代表任何第三方出于与以下无关的任何目的 面向用户的关键应用程序功能。 Android 设备运行 Android“R”(Android 11)或更高版本,将需要 MANAGE_EXTERNAL_STORAGE 权限,以便管理共享中的访问 贮存。所有面向 R 或更高版本并请求广泛访问的应用程序 共享存储(“所有文件访问”)必须成功通过 发布前进行适当的访问审查。允许使用的应用程序 此权限必须明确提示用户启用“所有文件访问” 在“特殊应用程序访问”设置下查看他们的应用程序。了解更多 有关 R 要求的信息,请参阅此帮助文章。

阅读有关使用所有文件访问权限的更多信息 请参阅 Android 存储 使用案例和最佳实践 在 Play 管理中心解决此问题。
问题:需要使用 Media Store API

您已请求访问所有文件访问权限,但它 您的应用程序的核心功能似乎只需要访问媒体 文件。借助 MediaStore API,应用程序可以贡献和访问媒体 无需外部存储卷即可使用 访问所有文件的权限。

请更新您的应用程序,以便该功能使用媒体商店 API 和 删除所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。

策略:所有文件访问权限

用户设备上的文件和目录属性被视为 个人和敏感用户数据受个人和敏感条款约束 信息政策和以下要求:

应用程序应该只请求访问至关重要的设备存储 让应用程序正常运行,并且可能不会请求访问设备存储 代表任何第三方出于与以下无关的任何目的 面向用户的关键应用程序功能。 Android 设备运行 Android“R”(Android 11)或更高版本,将需要 MANAGE_EXTERNAL_STORAGE 权限,以便管理共享中的访问 贮存。所有面向 R 或更高版本并请求广泛访问的应用程序 共享存储(“所有文件访问”)必须成功通过 发布前进行适当的访问审查。允许使用的应用程序 此权限必须明确提示用户启用“所有文件访问” 在“特殊应用程序访问”设置下查看他们的应用程序。了解更多 有关 R 要求的信息,请参阅此帮助文章。

阅读有关使用所有文件访问权限的更多信息 请参阅 Android 存储 使用案例和最佳实践以及如何从共享访问媒体文件 存储 在 Play 管理中心解决此问题。


Using MANAGE_EXTERNAL_STORAGE这不是一个好主意,除非您的应用程序是文件管理器、防病毒软件或清理应用程序。但是,就您而言,您只需要访问特定文件夹,即/sdcard/emulated/0/WhatsApp。我们仍然有一个解决方法,可以通过以下方式授予此文件夹的完全访问权限存储访问框架文件夹选择器。

您可以通过强制用户选择 WhatsApp 文件夹Intent.ACTION_OPEN_DOCUMENT_TREE,然后保存权限状态ContentResolver#takePersistableUriPermission()。但是编写自己的代码来处理这个问题可能需要付出很大的努力。

我建议你使用简单存储。因为它更简单:

class MainActivity : AppCompatActivity() {

    private val storageHelper = SimpleStorageHelper(this)

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

        storageHelper.onStorageAccessGranted = { _, root ->
            Toast.makeText(
                this,
                "Folder ${root.getAbsolutePath(this)} is accessible now.",
                Toast.LENGTH_SHORT
            ).show()
        }

        btnRequestStorageAccess.setOnClickListener {
            // Force the user to select directory /sdcard/emulated/0/WhatsApp
            // The access will be granted once the user selected this folder,
            // and then you can explore this directory.
            storageHelper.requestStorageAccess(
                requestCode = REQUEST_CODE_STORAGE_ACCESS,
                initialPath = FileFullPath(this, StorageId.PRIMARY, "WhatsApp"),
                expectedStorageType = StorageType.EXTERNAL,
                expectedBasePath = "WhatsApp"
            )
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        storageHelper.onSaveInstanceState(outState)
        super.onSaveInstanceState(outState)
    }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        storageHelper.onRestoreInstanceState(savedInstanceState)
    }
}

这个答案可能不符合您的期望,但您可以尝试这个替代方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PlayStore 不断拒绝 MANAGE_EXTERNAL_STORAGE 权限的应用程序更新,并且应用程序描述也未更新 的相关文章

  • 通过存储访问框架 (SAF) 启用显示/隐藏 SD 卡的额外功能

    我正在使用存储访问框架 SAF Intent intent new Intent Intent ACTION OPEN DOCUMENT intent addCategory Intent CATEGORY OPENABLE intent
  • 浮动操作按钮动画

    当 fab 出现时 它使用动画中的比例进行动画处理 当它隐藏时 它使用向外扩展动画 因此 它是一个缩小和缩小的动画 这个动画要怎么制作呢 从 Zielony 的回答来看 我完全按照我想要的方式制作了它 下面是正确应用效果的代码 scale
  • 如何在同一个列表视图中同时实现ontouch和onfling?

    我有一个listview并实现了onclick和onfling 问题是当我进行fling 从左向右滑动 时 listview的onclick事件也被执行 如何克服这个问题 如何区分列表视图中的触摸 点击 和滑动 滑动 listClickLi
  • 使用书法库的某些活动使用不同的字体

    我在用书法 https github com chrisjenx Calligraphy在我的应用程序中使用自定义字体的库 我使用默认字体为整个应用程序设置了自定义字体CalligraphyConfig in my Application类
  • 未找到 Gradle DSL 方法:“exclude()”

    我正在 Android Studio 中工作 当我在 build gradle 文件中添加该行时 dependencies compile files libs poi ooxml schemas 3 12 20150511 a jar e
  • Android API 列表

    我想获取 CellInfo 数据 但 cellinfo size 总是发生 模拟器中的 NullPointerException 细胞信息链接 http developer android com reference android tel
  • react-native-camera (android): takePictureAsync() 抛出错误

    从react native camera调用takePictureAsync 后 我收到此错误 framesToPop 1 nativeStackAndroid userInfo null message Preview is paused
  • 来自 InputStream 的 Android 通用图像加载器 URI

    我想问一下UIL URI是从InputStream输入的 因为我的图像源来自 ZIP 然后我必须提取它才能显示该图像 因为图像太大 我必须使用UIL库 任何人都知道如何从InputStream插入UIL 我认为你可以这样做类似于从数据库加载
  • 如何让文字发光?

    我们可以将发光效果应用于任何文本 如下所示 Updated Please also tell me what things i need to create something like this 我需要为此使用特殊字体吗 如何使用以下命令
  • 从主线程查询android中的数据库

    我使用的是 sql lite 通常查询 1 个表 如果我从主 ui 线程进行查询会不会很糟糕 谢谢 这取决于 如果您的表确实很大 则执行查询可能需要一些时间 并且可能会导致您的应用程序出现明显的延迟 还有 你说你usually仅查询一张表
  • 如何解决Android中的NullPointerException错误?

    下面的代码在 Eclipse 的模拟器中运行顺利 但在 Android 手机和平板电脑上运行时出现问题 public class RingerActivity extends Activity Called when the activit
  • 以编程方式更改小部件布局

    假设我有两个小部件布局 Layout1 和 Layout2 小部件的默认值是 Layout1 但我允许用户选择 他们希望小部件采用哪种布局 所以如果用户更改为 Layout2 如何以编程方式将布局更改为 Layout2 小部件没有像活动那样
  • Android MapView v2 黑屏

    我一直在尝试实现 android 的 MapView v2 除了这个错误之外 我让它工作得很好 This is what it looks like when I load the app from scratch 如您所见 没有任何问题
  • Android:传递给 AESObfuscator 的随机 SALT 字节是否需要保持不变?

    我正在 Android 应用程序中实现许可 并且需要将一个 20 字节的数组传递到 AESObfuscator 然后再传递给 ServerManagedPolicy 对象 这个数组可以在每次运行代码时随机生成 还是必须硬编码 现在我正在随机
  • 如何在phonegap中同时使用相机API选择多个图像?

    如何同时选择或拾取多个图像phonegap camera API使用时Camera DestinationType FILE URI 我一次只能选择一张图像 我可以使用以下命令在 SD 卡中选择多个文件 包括 txt pdf this ht
  • 谷歌分析崩溃报告仅显示堆栈跟踪的第一行

    我的应用程序使用 Google Analytics 来跟踪异常和崩溃 除其他外 我使用这个函数来获取堆栈跟踪 public static void sendErrorReportViaGoogleAnalytics Exception e
  • 如何使用游戏循环每五秒在屏幕上出现和消失一个对象

    我正在尝试学习 Android 游戏开发 首先 我尝试每五秒使用游戏循环在屏幕上出现和消失一个对象 但我没有成功 我读过不同的教程和论坛 我按照教程中的方式应用了所有内容 但对象仍然在连续绘制 它并没有消失 我没有得到我所缺少的东西 请指导
  • Android 位图到 WebRtc I420 帧损坏

    尝试通过 WebRtc 流式传输位图 我的 Capturer 类大约如下所示 public class BitmapCapturer implements VideoCapturer VideoSink private Capturer c
  • MediaPlayer() 音频口吃(android)

    我正在我的 Android 应用程序中使用 MediaPlayer 函数从远程服务器传输实时音频流 但音频断断续续且断断续续 问题不在于我的互联网 因为当我在计算机上播放时 提要播放得很好 可能是什么问题 注意 直播正在进行中 这是我正在使
  • Firebase 附加权限。是否要求用户接受

    我目前正在致力于将 Firebase Analytics 集成到我的 Android 应用程序中 我遇到的问题是 Firebase 添加了一些新权限 这些权限是 permission WAKE LOCK com google android

随机推荐

  • 如何在 Matplotlib 中以 3D 形式绘制热图颜色

    I am using Matplotlib 3D to plot 3 dimensions of my dataset like below 但现在我还想将第四维 即 0 到 20 之间的标量值 可视化为热图 所以基本上 我希望每个点都根据
  • App Engine Java 11 无法在实时服务器上找到或加载主类

    tl dr 为什么这在本地有效 但在部署到实时 App Engine 项目时却无效 我正在尝试使用 Java 11 版本的 App Engine 创建一个基于 servlet 的准系统 Web 应用程序 我正在将一些项目从 Java 8 更
  • 如何在 multiautocompletetextview 中使用空间标记器(如 gmail 到 android 中的字段)正确添加和删除联系人气泡

    i am struggling alot with adding the Bubbles to to field like in gmail or facebook messanger please look into this pictu
  • Android“您需要将 Theme.AppCompat 主题(或后代)与设计库一起使用”

    好的 我收到此错误 标题 很多帖子建议我 甚至Android studio 更改主题 更改为App Appcompat 我已经做到了 清单文件
  • PHP - json_encode(string, JSON_UNESCAPED_UNICODE) 不转义捷克字符

    我从数据库中选择一些数据并将它们编码为 json 但我遇到了捷克符号的问题 例如 我的文件采用utf 8编码 我的数据库也是utf 8编码 我也将标头设置为utf 8编码 请问我还应该做什么 My code header Content T
  • VS2015企业版中出现错误C4576

    我有错误C4576在 Visual Studio 2015 中 当我尝试编译文件 transcoding c 时 该文件的源代码在这里 转码 c 错误 C4576 带括号的类型后跟初始值设定项列表是非标准显式类型转换语法 错误出现在该指令的
  • 列出 git-ls-remote 时为什么标签名称后面有“^{}”? [复制]

    这个问题在这里已经有答案了 当我跑步时git ls remote在工作树中 该命令输出原始存储库中的修订列表 由于某种原因 我对每个标签进行了 2 个修订 对于同一标签的第二个修订 标签名称包括 git ls remote From ema
  • 中断等待阻塞操作的线程?

    我正在运行一个线程 其主要操作是使用阻塞函数调用代理 并等待它给它一些东西 我已经使用了 挥发性布尔值 和 Interruption 的已知模式 但我不确定它是否会起作用 当我尝试添加 catch 块时InterruptedExceptio
  • 使用 GitHub API 下载文件时解码 base64

    我正在使用 GitHub API 从 GitHub 下载文件 我已经能够成功进行身份验证并从 github 获得响应 并看到表示文件内容的 Base64 编码字符串 不幸的是 在解码 Base64 字符串时出现了异常错误 字符串长度不是 4
  • libcurl HTTPS POST 数据发送?

    我有通过 HTTP POST 请求接收数据的应用程序 我正在尝试使用 libcurl 打开对此应用程序的请求 发送数据并接收从应用程序返回的回复 这是我到目前为止的代码 int main void CURL curl CURLcode re
  • 如何在 Eclipse 2020-09 中使用 Java 版本 15

    我正在尝试在 Eclipse 2020 09 下运行新的 Java 15 功能 我已经安装了 OpenJDK 15 并将其设置在 Installed JRE 下 尽管如此 我无法将此版本设置为编译器版本 仅限版本 14 我究竟做错了什么 E
  • Mega 的加密如何用于共享?

    我有一些关于找到一种方法来实现可以与多个收件人共享的任意数据的加密的问题 Mega 似乎正是这样做的 据我所知 它在将数据上传到网络服务器之前对其进行加密 仍然可以与其他人共享该文件 加密是如何完成的 想象一下以下场景 用户Alice将文件
  • 获取非常大的文件的 MD5 校验和

    我编写了一个脚本 该脚本读取目录中的所有文件并返回每个文件的 md5 哈希值 但是 对于相当大的文件 它不会呈现任何内容 我假设解释器为最大处理时间设置了一些值 并且由于获取该值需要很长时间 因此它只是跳到其他文件 有没有办法通过 PHP
  • 如何在 yii 框架中自动设置 url 友好

    我刚刚学习 yii 框架并阅读了本教程 关于yii 如何设置 url 但我不知道 假设我有10个控制器 我应该在配置文件中一一定义控制器吗 有没有更好的方法来为所有控制器设置像 www yoursite com yourController
  • 将标题层次结构生成为有序列表

    我已经思考这个问题有一段时间了 但无法想出可行的解决方案 我什至无法对其进行伪编码 举例来说 您有一个标题结构如下的页面 h1 Heading level 1 h1 h2 Sub heading 1 h2 h2 Sub heading 2
  • 在运行时请求权限,Android M+

    首先 我知道这是一个重复的问题 但我已经看过其他类似问题的答案 但未能通过这些解决方案取得成功 我开发了一个应用程序 它可以在我的测试设备上完美运行 该设备是运行 Android L 5 0 1 的三星 S4 但我希望该应用程序也可以在较新
  • 从 Windows 获取 Rssi 值

    我想测量调制解调器的 rssi 值 是否有任何 api 可以获取 Windows 的 rssi 值 我曾经使用 android 中的 Wifi Manager 来做到这一点 但我找不到任何适用于 Windows 的 api 使用本机代码是最
  • R / ggplot2:评估表达式内的对象

    示例代码 rsq lt round cor mtcars disp mtcars mpg 2 2 rsq 0 72 ggplot mtcars aes x disp y mpg geom point geom smooth method l
  • 使用 rspec 和 capybara 测试由 cocoon 动态添加的字段

    我想知道是否有人测试由 cocoon 动态添加的字段 这是一个很好的节省时间的方法 但是动态添加的所有字段都在 ID 和名称中添加了非常长的数字 这意味着我必须跳过需要页面上多个 一组 字段的测试 Afaik 你可以测试两件事 嵌套元素的动
  • PlayStore 不断拒绝 MANAGE_EXTERNAL_STORAGE 权限的应用程序更新,并且应用程序描述也未更新

    我的应用程序帮助用户管理 Whatsapp 贴纸链接到应用程序它在第一个版本中支持 SDK30 但在该版本之后 当我尝试更新新版本的应用程序 Playstore 时 我的应用程序状态被拒绝 我尝试了多次 我已经在应用程序描述甚至应用程序中提