我开发了一个 PDF 阅读应用程序,其中主屏幕显示本地存储中的 PDF 文件列表。我在 Flutter 应用程序中使用以下代码来管理权限和加载 PDF 文件:
Android 清单
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_DOCUMENTS" />
飞镖代码
// Permission checks and loading PDF files
Future<void> _checkPermissionAndLoadPDFFiles() async {
// Check permission status
_permissionStatus = await Permission.manageExternalStorage.status;
if (_permissionStatus.isGranted) {
await _loadPDFFiles();
} else {
if (await Permission.manageExternalStorage.isPermanentlyDenied) {
_showPermissionDeniedDialog();
} else {
await _requestPermission();
}
}
}
// Request permission
Future<void> _requestPermission() async {
final status = await Permission.manageExternalStorage.request();
if (status.isGranted) {
_permissionStatus = PermissionStatus.granted;
await _loadPDFFiles();
} else if (status.isPermanentlyDenied) {
_showPermissionDeniedDialog();
}
}
发现问题:不是核心功能 您声明为依赖于所有文件访问权限的应用程序功能不符合关键核心功能的策略审核要求。
核心功能被定义为应用程序的主要目的。如果没有这个核心功能,应用程序就会“损坏”或变得无法使用。核心功能以及构成此核心功能的任何核心功能都必须在 Google Play 上应用的商品详情描述中进行显着记录和宣传。
更新您的应用程序,以便该功能不使用此权限。如果您的应用不需要访问 MANAGE_EXTERNAL_STORAGE 权限,则必须将其从应用清单中删除,才能成功满足政策审核要求。
或者,如果您的应用程序在没有此许可的情况下“损坏”或变得无法使用,则您之前的声明可能有误或不清楚。当您填写权限声明表并在 Play 管理中心重新提交您的应用时,请确保核心功能和技术理由在应用描述中得到清晰记录和宣传。
此外,请按照以下步骤使您的应用程序合规:
按照以下步骤使您的应用程序合规:
查看所有文件访问权限策略。 阅读有关使用所有文件访问权限的更多信息,以更好地了解允许和无效的使用。 查看 Android 存储用例和常见存储用例的最佳实践。 如果您的应用满足允许使用的要求,请阅读如何声明您的应用的权限。 关于所有文件访问权限策略 用户设备上的文件和目录属性被视为个人和敏感用户数据,受个人和敏感信息政策和以下要求的约束:
应用程序应仅请求访问对于应用程序运行至关重要的设备存储,并且不得出于与面向用户的关键应用程序功能无关的任何目的代表任何第三方请求访问设备存储。 运行 Android“R”(Android 11) 或更高版本的 Android 设备将需要 MANAGE_EXTERNAL_STORAGE 权限才能管理对共享存储的访问。所有面向 R 或更高版本并请求对共享存储进行广泛访问(“所有文件访问”)的应用程序都必须在发布之前成功通过适当的访问审核。允许使用此权限的应用程序必须明确提示用户在“特殊应用程序访问”设置下为其应用程序启用“所有文件访问”。有关 R 要求的更多信息,请参阅使用所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。
我需要帮助找到解决此问题的解决方案,以便我可以在 Google Play 商店中成功上传我的应用程序。
就您而言,不需要这样的关键许可。
所以,你可以改用这个方法:
Manifest文件源代码:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Dart 文件源代码:
Future<bool> permissionStorage() async {
bool hasStoragePermission = false;
final PermissionStatus try0 = await Permission.storage.status;
if (try0 == PermissionStatus.granted) {
hasStoragePermission = true;
} else {
final PermissionStatus try1 = await Permission.storage.request();
if (try1 == PermissionStatus.granted) {
hasStoragePermission = true;
} else {}
}
return Future<bool>.value(hasStoragePermission);
}