标签: android-external-storage

Android - 不同存储选项的生命周期

Android提供以下数据存储选项:

共享首选项 - 将私有原始数据存储在键值对中.

内部存储 - 将私有数据存储在设备内存中.

外部存储 - 将公共数据存储在共享外部存储上.

SQLite数据库 - 将结构化数据存储在私有数据库中.

缓存 - 应用程序运行期间缓存数据.(可能在空间不足时可以清楚)

我想知道的是这些存储的生命周期.

  1. 应用程序关闭时清除哪些存储(显然缓存)
  2. 应用程序重新安装时清除哪些存储
  3. 应用程序更新时清除了哪些存储
  4. 卸载应用程序时清除哪些存储
  5. 哪些存储清除了应用程序清除数据
  6. 移动工厂重置时清除哪些存储
  7. Rom升级/更改时清除了哪些存储

这个问题的一个扩展是,使用哪个存储我的数据在丢失未授权资源(用户,root用户的应用程序)访问方面更安全.

security android lifetime android-sqlite android-external-storage

5
推荐指数
1
解决办法
943
查看次数

用于访问图库的Android 6运行时权限

我对Android 6(Marshmallow)运行时权限有疑问.如果用户想要从图库中选择照片,我们是否应该请求READ_EXTERNAL_STORAGE许可?

好像我可以访问图库,即使我关闭存储权限.

android-gallery android-external-storage android-6.0-marshmallow runtime-permissions

5
推荐指数
1
解决办法
4135
查看次数

在AndroidTest中写入外部存储

我想AndroidTest为某个应用编写一个涉及写入外部存储的应用,但是以某种方式我无法使其正常工作。(在Pixel2,Lg G6,Huawai P8等多种设备上进行测试)

因此,我简化了所有操作,只是为了测试是否可以完全写入外部存储。我尝试了GrantPermissionRule并在Granter上进行了编写,但没有成功。

我可能最终做了太多不必要的事情,所以这是我所做的:

  1. 在没有活动的情况下创建新项目 AndroidStudio
  2. 向清单添加了权限
  3. 加入AndroidManifestuses-permission标签
  4. 自己写 PermissionRequester
  5. 编写测试以尝试在/ sdcard / Download中添加文件夹并将其删除

以下是上面编号列表引用的摘录

2。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.android.testpermissions">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="com.company.TestPermissions"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

3。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.android.testpermissions.test">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

也尝试过

<manifest package="com.company.android.testpermissions">...
Run Code Online (Sandbox Code Playgroud)

省略“测试”后缀

4。

public class MyPermissionRequester {

    public static final String TAG = MyPermissionRequester.class.getSimpleName();

    public static void request(String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            UiAutomation auto = InstrumentationRegistry.getInstrumentation().getUiAutomation();
            String cmd = …
Run Code Online (Sandbox Code Playgroud)

java testing android android-permissions android-external-storage

5
推荐指数
1
解决办法
2002
查看次数

谷歌说检测到 requestLegacyExternalStorage 标志,但我的应用程序不使用它

我在使用 api 29 和 api 30 编译的应用程序中收到了这封电子邮件。

这些应用程序不包含 requestLegacyExternalStorage标志,也不包含 MANAGE_EXTERNAL_STORAGE.

我已经在清单合并日志和最终合并的清单中搜索过,并没有requestLegacyExternalStorage在里面找到标志。

这些应用程序只有旧的和已弃用WRITE_EXTERNAL_STORAGEAndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)

是否是从谷歌发出警告的旧的和已弃用的许可?从我的应用程序中删除该权限就足以解决这个问题吗?

从 5 月 5 日起,您必须让我们知道为什么您的应用需要广泛的存储访问权限

我们检测到您的应用requestLegacyExternalStoragemanifest1 个或多个 app bundle 或 APK的文件中包含该 标志。

在运行Android 11+ 的设备上使用应用的开发人员必须使用 Scoped Storage 来让用户更好地控制他们的设备存储。要在 5 月 5 日之后在Android 11或更高版本上发布您的应用,您必须:

更新您的应用程序以使用更多隐私友好的最佳实践,例如存储访问FrameworkMedia Store API

更新您的应用以MANAGE_EXTERNAL_STORAGE在清单文件中声明所有文件访问 ( ) 权限,并从 5 月 5 日起在 Play 管理中心完成所有文件访问权限声明

从您的应用程序中完全删除所有文件访问权限

对于面向Android 11 的应用,该 …

android android-permissions android-external-storage android-10.0 android-11

5
推荐指数
0
解决办法
1213
查看次数

在我的应用中显示设备中的所有图像

我使用下面的代码从DCIM中的Camera文件夹中获取所有图像并显示在我的应用程序中.但我想在我的应用程序中显示设备上的所有图像,无论它们存储在设备上的哪个位置.我怎样才能做到这一点?

 String ExternalStorageDirectoryPath = Environment
                .getExternalStorageDirectory()
                .getAbsolutePath();
        String targetPath = ExternalStorageDirectoryPath + "/DCIM/Camera";
        images=new ArrayList<String>();
        File targetDirector = new File(targetPath);

        File[] files = targetDirector.listFiles();
        for (File file : files) {

            images.add(file.getAbsolutePath());
        }
        gallerylist=new CameraGalleryAdapter(getActivity().getApplicationContext(),R.layout.giphy_grid,images);
        gridview.setAdapter(gallerylist);
Run Code Online (Sandbox Code Playgroud)

android android-gallery android-camera android-external-storage

4
推荐指数
1
解决办法
7230
查看次数

Android - 如何使用新的存储访问框架将文件复制到外部SD卡

我正在我的应用程序中实现文件浏览器功能.我知道如何使用ACTION_OPEN_DOCUMENT_TREE意图获得外部SD卡的持久权限,以及如何使用DocumentFile类创建文件夹和删除文件/文件夹.

但是,我找不到将文件复制/移动到外部SD卡文件夹的方法.你能指出我正确的方向吗?

android android-external-storage storage-access-framework

4
推荐指数
1
解决办法
3198
查看次数

Android mkdir() 返回 false,不创建文件夹

这真让我抓狂。我已经尝试了各种语法,但两者mkdir()mkdirs()返回FALSE。

我的代码:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

File folder = new File(extStorageDirectory, "myportal");
boolean bool = folder.mkdir();

File pdfFile = new File(folder, fileName);

try{
    pdfFile.createNewFile();
}catch (IOException e){
    e.printStackTrace();
}
FileDownloader.downloadFile(fileUrl, pdfFile);
Run Code Online (Sandbox Code Playgroud)

我正在IOException: No such file or directory尝试创建文件时。logcat 部分显示没有创建目录:

Log.d("BG", "URL: " + fileUrl);
Log.d("BG", "pdfFile: " + pdfFile);
Log.d("BG", "Ext Storage: " + extStorageDirectory);
Log.d("BG", "Ext storage state: " + Environment.getExternalStorageState().toString());
Log.d("BG", "Mkdir return: " + bool);
Log.d("BG", "IsDirectory: " + folder.isDirectory());
Run Code Online (Sandbox Code Playgroud)

以及打印的内容:

05-26 …
Run Code Online (Sandbox Code Playgroud)

directory android android-external-storage

4
推荐指数
2
解决办法
7954
查看次数

在Android中保存文件-对于初学者(内部/外部存储)

我对android开发非常陌生,请需要新手帮助...

我正在创建一个应具有2个目录,一个Databases目录和一个Images目录的应用程序,就像Whatsapp拥有的一样。

当我浏览手机时,我想在文件管理器中看到这些目录,就像看到其他应用程序文件夹一样。我尝试了在这里找到的所有内容,并通过代码在内部存储和外部存储中创建了它。该文件夹似乎已创建,但是当我浏览手机的文件管理器时,找不到带有应用程序名称的文件夹,而在其中没有我的数据库和图像文件夹...我在做什么错?我需要在android studio中创建这些文件夹作为添加文件夹吗?还是我需要通过代码创建它?

您能给我完成这项任务所需要做的动作吗?我正在使用android studio 3.1.3。感谢您的帮手!:)

android-external-storage android-studio android-internal-storage android-studio-3.1 android-studio-3.1.3

4
推荐指数
1
解决办法
7227
查看次数

即使我使用了用于保存它的相同路径,Android Intent 也会打开空白 PDF

我正在尝试从具有以下布局的布局生成 PDF:

                PdfDocument document = new PdfDocument();
                PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(2480, 3508, 0).create();
                PdfDocument.Page page = document.startPage(pageInfo);

                linearview.draw(page.getCanvas());
                document.finishPage(page);

                OutputStream outStream;
                File file = new File(getExternalFilesDir(null), "pedido.PDF");

                try {
                    outStream = new FileOutputStream(file);
                    document.writeTo(outStream);
                    document.close();
                    outStream.flush();
                    outStream.close();
                    Log.d(TAG, "pdf saved to " + getExternalFilesDir(null));
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    File myPDF = new File(getExternalFilesDir(null), "pedido.PDF");
                    Uri uri = FileProvider.getUriForFile(OrderActivity.this, BuildConfig.APPLICATION_ID + ".provider", myPDF);
                    Log.d(TAG, "openPDF: intent with uri: " + uri);
                    intent.setDataAndType(uri, "application/pdf");
                    startActivity(intent);
                } catch (FileNotFoundException e) { …
Run Code Online (Sandbox Code Playgroud)

pdf android android-intent android-external-storage

4
推荐指数
1
解决办法
536
查看次数

READ_EXTERNAL_STORAGE 不适用于 Android 10

我正在尝试将照片发送到服务器,但我无法仅在 Android 10 上访问照片。发出 READ_EXTERNAL_STORAGE 请求,单击“允许”,在设置中,允许访问存储。

显现

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)

分段

private fun haveStoragePermission() =
    ActivityCompat.checkSelfPermission(requireActivity(), Manifest
       .permission.READ_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED

private fun requestPermission() {
  if (!haveStoragePermission()) {
     val permissions = arrayOf(
          Manifest.permission.READ_EXTERNAL_STORAGE
     )
     ActivityCompat.requestPermissions(requireActivity(), permissions, STORAGE_REQUEST_PERMISSION)
  }
}
Run Code Online (Sandbox Code Playgroud)

文件路径显示在日志中。绝对的,喜欢file:///emulated/0/...photo.jpg,方便,因为你可以立即上传到服务器,但毕加索和服务器不接受照片,或者说它似乎不允许读取(毕加索由于错误显示占位符)。此代码仅在您添加requestLegacyExternalStorage到清单时才有效。然后一切正常,但是这个属性在 Android 11 中消失了。我不知道为什么 10 Android 不工作,尽管在 7、8、6 上使用测试设备一切正常。

//Get images code
private fun getAllShownImagesPath(activity: Activity): ArrayList<String> {
    val listOfAllImages = ArrayList<String>()
    val uri: Uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
    val projection = arrayOf(
        MediaColumns.DATA,
        MediaStore.Images.Media.BUCKET_DISPLAY_NAME
    )
    val cursor = …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-external-storage

4
推荐指数
1
解决办法
2210
查看次数