标签: android-11

在 Android Studio 的 build.gradle 中设置 Android R/11 的 API 级别是什么?

我可以通过 Android Studio Emulator 使用 API R。我知道我可以直接从 Android Studio 运行,但我仍然想在 Gradle 级别进行设置。

android {
    compileSdkVersion 30
    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
Run Code Online (Sandbox Code Playgroud)

android android-11

6
推荐指数
1
解决办法
6011
查看次数

如何提示内容管理器选择器直接在 ACTION_OPEN_DOCUMENT_TREE 的可选位置上打开

当您ACTION_OPEN_DOCUMENT_TREE在 Android 11 中选择存储文件的路径的权限时,默认的 Android 内容管理器默认会在最近使用的路径上打开,并且由于某种原因“使用此文件夹”按钮根本不会出现,即使此路径是可访问路径,除非用户手动移动路径以转到合适的位置(或者返回默认打开的路径,如果这是可选位置,则移动到目录)。

例如,假设用户使用的最新路径是Documents。当我要求用户选择允许应用程序保存文件的路径时,

Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
i.addCategory(Intent.CATEGORY_DEFAULT);
Run Code Online (Sandbox Code Playgroud)

这就是出现的情况:

在此输入图像描述

正如您所看到的,没有“使用此文件夹”蓝色按钮。

现在,如果用户从此处选择超级文件夹路径并在文档中再次输入,这就是他所看到的:

在此输入图像描述

现在“使用此文件夹”按钮可用。

这是完全没有意义的,而且对用户体验来说非常糟糕,许多用户最终肯定会感到烦恼和困惑地卸载该应用程序。

难道我做错了什么?是否可以向意图传递一些提示,以便直接在所有 Android 设备存储(例如DocumentsACTION_OPEN_DOCUMENT_TREE )中可用的特定路径中打开内容管理器视图,并在打开选择器时使用“使用此文件夹”按钮?

android storage-access-framework android-11

6
推荐指数
0
解决办法
531
查看次数

Android 11 - ROOT:挂载 /system 失败,在 /proc/system 中找不到

我的操作系统是 PixysOS - Android 11 当我这样做时

mount -o rw,remount /system
Run Code Online (Sandbox Code Playgroud)

它失败了——

mount: '/system' not in /proc/mounts
Run Code Online (Sandbox Code Playgroud)

但通常它是有效的。我也在android 9中测试过

android root android-11

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

在 Android 11 上将 PDF 保存在外部下载目录中

Android 11 中引入了范围存储。根据文档,应使用保存非媒体文件(如 PDF)的存储访问框架。因此,使用存储访问框架的用户需要使用系统文件选择器选择位置来保存非媒体文件(PDF)。但是如果您在 Android 11 上使用 Whatsapp 应用程序并尝试保存 PDF 文件,它永远不会要求用户选择位置。默认情况下,它将保存 pdf 文件到外部文档目录。我想在我的应用程序中复制相同的行为。有人可以在这里指导我吗?

storage android scoped-storage android-11

6
推荐指数
1
解决办法
6738
查看次数

PROCESS_TEXT 在 Android 11 之后的大多数应用的文本选择菜单中不可见

我在清单文件中有以下配置 -

<activity
            android:name=".activities.PopupWord"
            android:excludeFromRecents="true"
            android:theme="@style/popups">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PROCESS_TEXT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>

        </activity>
Run Code Online (Sandbox Code Playgroud)

我可以在 Android 10 中的 Twitter 等应用程序的文本选择菜单中看到“查找”按钮,但在 Android 11 中它消失了。令人惊讶的是它在 Chrome 中运行。

维基百科测试版以某种方式规避了这个问题,并在各处显示其“在维基百科中搜索”按钮。我试图查看它的清单,发现它很相似。

<activity
            android:name="org.wikipedia.search.SearchActivity"
            android:windowSoftInputMode="0x10">

            <intent-filter
                android:label="@ref/0x7f100190">
                <action
                    android:name="android.intent.action.SEND" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data
                    android:mimeType="text/plain" />
            </intent-filter>

            <intent-filter
                android:label="@ref/0x7f100190">
                <action
                    android:name="android.intent.action.PROCESS_TEXT" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <data
                    android:mimeType="text/plain" />
            </intent-filter>
        </activity> …
Run Code Online (Sandbox Code Playgroud)

java android android-11

6
推荐指数
1
解决办法
1233
查看次数

如何保存并检查文件是否存在于作用域存储中?

到目前为止,我检查文件是否存在,如果不存在,则将其保存到 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 中的设备,但 Android 10 不支持它。

所以我尝试使用 mediastore API 来保存图像。

READ_STORAGE_PERMISSION -> 不允许

首先,我使用以下代码查询 contentresolver 以检查文件是否存在:

Uri collection = null;
collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
String[] PROJECTION = new String[]{MediaStore.Images.Media.DISPLAY_NAME,
        MediaStore.MediaColumns.RELATIVE_PATH};
String QUERY = MediaStore.Files.FileColumns.RELATIVE_PATH + " like ? and " + 
MediaStore.Files.FileColumns.DISPLAY_NAME + " like ?";

ContentResolver mContentResolver = this.getContentResolver();
Cursor cursor = mContentResolver.query(collection, PROJECTION, QUERY , new String[]{"%" + dirName + "%", "%" + fname + "%"}, null);

if (cursor != null) {
    Log.d("upisdk", "cursor != null");
    if (cursor.getCount() > …
Run Code Online (Sandbox Code Playgroud)

android mediastore android-11

6
推荐指数
1
解决办法
4063
查看次数

我们可以使用 MediaStore API 删除图像文件吗?如果是的话怎么办

我需要在我的应用程序中使用后台服务一定时间后删除屏幕截图图像文件,并且使用上述方法工作正常

private void deleteTheFile(String path) {
    File fdelete = new File(path);
    if (fdelete.exists()) {
        if (fdelete.delete()) {
            getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(path))));
            Log.i(TAG, "deleteTheFile: file deleted");
        } else {
            Log.i(TAG, "deleteTheFile: file not dellleeettteeeddd");
        }
    }
Run Code Online (Sandbox Code Playgroud)

但正如每个人都知道 android R (11) 带来的变化所以我尝试更新我的应用程序

MANAGE_EXTERNAL_STORAGE 权限

但谷歌拒绝了我的更新说

问题:需要使用 Media Store API

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

请更新您的应用,以便该功能使用媒体存储 API 并删除所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。

但我以前从未使用过媒体存储API,我不知道它是否可以用它删除图像文件,因为删除文件属于可写部分

android file-permissions mediastore delete-file android-11

6
推荐指数
1
解决办法
3731
查看次数

捕获的图像未存储在 android 11 中

我无法将捕获的图像存储在 (getExternalFilesDir(Environment.DIRECTORY_PICTURES)) Android 11 设备中。

<uses-permissionandroid:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>也添加了清单和所有文件访问权限。但这不起作用。

if (Build.VERSION.SDK_INT >= 30) {
            if (!Environment.isExternalStorageManager()) {
                try {
                    val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
                    intent.addCategory("android.intent.category.DEFAULT")
                    intent.data = Uri.parse(String.format("package:%s", applicationContext.packageName))
                    startActivityForResult(intent, 2296)
                } catch (e: Exception) {
                    val intent = Intent()
                    intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
                    startActivityForResult(intent, 2296)
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

此代码可在 Android 11 设备下运行。但在 Android 11 上文件未创建File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) .toString() + "/" + FolderName )

android android-11

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

由于不符合所有文件访问权限政策,Google Play 商店连续被拒绝

在目标 SDK API 级别迁移到 30 后,Google 审核团队不断拒绝我们的应用程序。拒绝原因是您的应用因违反政策而被拒绝且未发布。策略:所有文件访问权限。

Play 商店拒绝:
Play 商店拒绝

我们尚未在最新的清单中添加任何敏感权限和 API。也无法从我们最近提交的内容中找到任何请求敏感权限的 APK。

清单许可:
清单许可

在我们之前提交的一份文件中,我们不小心提交了一份“所有文件访问”权限声明表,但遭到了 Google 拒绝。

提交声明:
已提交声明

尽管我们已经在最新的APK中修复了这个权限问题,但声明表单从未消失或无法手动删除。由于同样的旧原因,该应用程序不断被拒绝。有过这种经历或者知道如何解决这个问题的人。

java android android-permissions google-play-console android-11

6
推荐指数
1
解决办法
4582
查看次数

检查是否为另一个应用程序授予了外部存储管理器

我需要检查其他应用程序是否具有外部存储管理器的权限。和

Environment.isExternalStorageManager()
Run Code Online (Sandbox Code Playgroud)

我检查当前应用程序是否已被授予。我如何为另一个应用程序执行此操作?我已经尝试检查权限状态

getPackageManager().checkPermission(Manifest.permission.MANAGE_EXTERNAL_STORAGE, "dk.tacit.android.foldersync.lite")
Run Code Online (Sandbox Code Playgroud)

但它总是返回 -1,这意味着 PERMISSION_DENIED,即使授予了权限。

permissions android android-external-storage android-11

6
推荐指数
1
解决办法
848
查看次数