由于某种原因,我真的很挣扎,希望有人能帮助我指明正确的方向。
我的目标是 Android 11 / API 30,这似乎是所有问题的根源。降低目标可能对我有用——但谷歌似乎最终会迫使我走上这条路,所以我不妨弄清楚这一点。
我的应用程序通常会按照标准写入文件
getExternalFilesDir(null)
Run Code Online (Sandbox Code Playgroud)
这给了我设备上的一条路径
/storage/emulated/0/Android/data/com.domain.testapp/files
Run Code Online (Sandbox Code Playgroud)
我还尝试了其他类型,例如:
getExternalFilesDir(Environment.DIRECTORY_PICTURES)
Run Code Online (Sandbox Code Playgroud)
结果是
/storage/emulated/0/Android/data/com.domain.testapp/files/Documents
Run Code Online (Sandbox Code Playgroud)
我的应用程序实际上将文件写入此位置没有任何问题。在 Android 11 中,我必须使用本地文件浏览器跳过一些麻烦才能查看这些文件 - 但它们确实存在于设备上。
我现在试图为用户提供一些查看文件和共享文件的能力,这就是我所困惑的地方!
下面的代码导致找不到文件
File filePath = this.getExternalFilesDir(null);
String filePathString = filePath.toString();
ArrayList<String> myData = new ArrayList<>();
File fileDir = new File(filePathString);
String[] files = fileDir.list();
if(files.length == 0){
Log.w(APPID, "NO FILES IN FOLDER");
}
Run Code Online (Sandbox Code Playgroud)
是的 - 我知道不需要 File 和 .toString() - 但我每一步都将它们注销,因为我认为我疯了。
我知道这个应用程序指向的文件夹中有十几个左右的文件。该应用程序创建了文件。不是应该能看到文件夹里的文件吗???
Manifest 具有以下权限 - 我认为它不需要全部:
<uses-permission android:name = "android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
没有权限显示为应用程序被拒绝
我想过使用外部存储 - 但似乎这在 Android …
我遇到了一个奇怪的问题。我有一个应用程序在一堆设备上运行,但在其中一个设备上失败了,出现了一些看似简单但我无法弄清楚的问题。
\n工具栏在我的所有设备上工作正常 - 但导致此错误:
\n\n\n不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。
\n
活动_main.xml:
\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\ntools:context=".MainActivity">\n\n<com.google.android.material.appbar.AppBarLayout\n android:id="@+id/appBarLayout"\n android:layout_width="match_parent"\n android:layout_height="wrap_content"\n android:theme="@style/AppTheme.AppBarOverlay"\n app:layout_constraintEnd_toEndOf="parent"\n app:layout_constraintStart_toStartOf="parent"\n app:layout_constraintTop_toTopOf="parent">\n\n <androidx.appcompat.widget.Toolbar\n android:id="@+id/toolbar"\n android:layout_width="match_parent"\n android:layout_height="?attr/actionBarSize"\n android:background="@color/header_color"\n app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" />\n\n</com.google.android.material.appbar.AppBarLayout>\nRun Code Online (Sandbox Code Playgroud)\n主题.xml:
\n<resources xmlns:tools="http://schemas.android.com/tools">\n<!-- Base application theme. -->\n<style name="Theme.TestApp" parent="Theme.MaterialComponents.DayNight.Bridge">\n <!-- Primary brand color. -->\n <item name="colorPrimary">@color/purple_500</item>\n <item name="colorPrimaryVariant">@color/purple_700</item>\n <item name="colorOnPrimary">@color/white</item>\n <!-- Secondary brand color. -->\n <item name="colorSecondary">@color/teal_200</item>\n <item name="colorSecondaryVariant">@color/teal_700</item>\n <item name="colorOnSecondary">@color/black</item>\n <!-- Status bar color. -->\n <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>\n <!-- Customize your theme here. …Run Code Online (Sandbox Code Playgroud)