标签: android-external-storage

如何使用adb将文件复制到可从PC访问的android目录

如果您将Android设备连接到PC,您可以浏览文件和目录.可以使用此目录Environment.getExternalStorage().您可以在应用程序中使用它并创建可访问的文件和目录.它工作正常.

在我的设备上这条路径看起来像/storage/emulated/0,如果我尝试adb push这个目录,我将获得访问被拒绝错误.是否可以将文件复制adb到与Windows资源管理器相同的文件夹中?

D:\...\tools>adb push ACCOUNTS.DB /storage/emulated/0
failed to copy 'ACCOUNTS.DB' to '/storage/emulated/0': Permission denied
58969 KB/s (606505 bytes in 0.010s)
Run Code Online (Sandbox Code Playgroud)

我正在实现自动导入/导出,我希望可以访问文件adb shell,万一不会出现任何问题.

目前使用变量$EXTERNAL_STORAGE作为变通方法,它适用于两者adb和应用程序.

设备:华硕Fonepad 7,Android 5.0,尝试了Genymotion Custom Tablet 6.0 - 工作.

android adb android-external-storage

18
推荐指数
1
解决办法
8214
查看次数

在 Android API 29 中访问外部存储

我正在尝试实现一些清理工具。由于某些“安全原因”,越来越多的制造商禁止生根设备,禁止不要求解锁。

API 28 之后,此代码将出错:


ActivityCompat.requestPermissions(this, new String[]{
  Manifest.permission.READ_EXTERNAL_STORAGE,
  Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result

File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用这个:

android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)

但我相信将来会被杀死。

那么,有什么优雅的方式来管理 SDCard 吗?

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

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

如何检查外部存储空间的可用性?

如何检查SD卡是否已满,以便您的应用程序可以决定是否可以继续执行其工作,即写入外部存储器或通知用户存储空间不足.

android android-sdcard android-external-storage

15
推荐指数
3
解决办法
8877
查看次数

Flutter[Android]:无法发布具有管理外部存储权限的应用程序

我们需要允许用户将文件存储在外部存储中,为此,我们MANAGE_EXTERNAL_STORAGE在应用程序中使用权限。

理想情况下,我们正在使用 Android SDK 版本 30 及以上版本,Permission.manageExternalStorage并使用Permission.storage低于 30 的 Android SDK 版本,如下面的代码所示

  // This func is added to access scope storage to export csv files
  static Future<bool> externalStoragePermission(BuildContext context) async {
    final androidVersion = await DeviceInfoPlugin().androidInfo;

    if ((androidVersion.version.sdkInt ?? 0) >= 30) {
      return await checkManageStoragePermission(context);
    } else {
      return await checkStoragePermission(context);
    }
  }

  static Future<bool> checkManageStoragePermission(BuildContext context) async {
    return (await Permission.manageExternalStorage.isGranted ||
        await Permission.manageExternalStorage.request().isGranted);
  }

  static Future<bool> checkStoragePermission(BuildContext context,
      {String? storageTitle, String? …
Run Code Online (Sandbox Code Playgroud)

android dart android-external-storage flutter

14
推荐指数
1
解决办法
7532
查看次数

/ sdcard/emulated/0和/ sdcard之间的差异

我对一个奇怪的问题很生气.如果我在我的代码中创建一个文件夹作为

directory_path = Environment.getExternalStorageDirectory()
                + "/" + context.getResources().getString(R.string.app_name);

directory = new File(directory_path);
if (!directory.exists()) {
    directory.mkdirs();
}
Run Code Online (Sandbox Code Playgroud)

在/ sdcard /中创建一个新文件夹.如果我尝试在logcat directory_path变量上打印,路径是不同的:/ storage/emulated/0 /如果我去那个路径,我找到了另一个与/ sdcard /上创建的文件夹同名的文件夹.这对我来说是一个问题,因为当我尝试将一些数据写入该文件夹时,everithing进入/ storage/emulated/0中的那个,而另一个(我想要使用的文件夹)保持为空.为什么?

directory android android-external-storage

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

Android 6.0 - 卸载应用时删除外部存储文件

我的应用程序使用DownloadManager将文件下载到设备的Music文件夹的子目录中.

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
...
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/MyStuff/song.mp3");
request.setDestinationUri(Uri.fromFile(file));
Run Code Online (Sandbox Code Playgroud)

我注意到当从运行Marshmallow的设备上卸载应用程序时,文件正在被删除(这在旧的OS版本中不会发生).你有什么想法吗?

谢谢

android download-manager android-external-storage android-6.0-marshmallow

13
推荐指数
1
解决办法
1153
查看次数

强制访问外部可移动microSD卡

我正在使用三星A3,Android 5.0.2.我正在使用此设置来编译应用程序,即Android 4.1 Jelly Bean(API 16)目标.

我确切地知道了外部可移动microSD卡的路径/mnt/extSdCard/(参见下面的注释#7).

问题:我注意到了

File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();
Run Code Online (Sandbox Code Playgroud)

不起作用:没有创建目录.

也:

File file = new File("/mnt/extSdCard/books/test.txt");   // the folder "books" already exists on the external microSD card, has been created from computer with USB connection
FileOutputStream fos = new FileOutputStream(file);
Run Code Online (Sandbox Code Playgroud)

产生此错误:

java.io.FileNotFoundException:/mnt/extSdCard/books/test.txt:open failed:libcore.io.IoBridge.open中的EACCES(权限被拒绝)(...

如何强制读取+写入外部可移动microSD卡?

笔记:

  1. Environment.getExternalStorageDirectory().toString()给出了/storage/emulated/0我的手机内部存储,即不是我想要的.

  2. getExternalFilesDir(null)给出/storage/emulated/0/Android/data/com.blahblah.appname/files/即不是我想要的东西.请注意,我不能getExternalFilesDirs在决赛中使用,s因为这在API16中不可用.此外,API16中也没有运行时权限.

  3. 我已经拥有了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,而且READ_EXTERNAL_STORAGE.

  4. 我读了很多喜欢的话题这一个这一个,其实大概20类似的问题,但最后似乎很复杂,一切都和它的相反之说.那是我的我正在寻找特定于这种情况的解决方案.

  5. 我不想ACTION_OPEN_DOCUMENT …

java android android-sdcard android-external-storage

12
推荐指数
1
解决办法
1514
查看次数

如何获得外部存储SD卡大小(带有安装的SD卡)?

链接:我根据此链接进行了工作

我添加了这一行来查找大小(内部和外部)大小,

return availableExternalMemorySize/(1024*1024);
Run Code Online (Sandbox Code Playgroud)

我在平板电脑上测试过.我得到内部和外部SD卡大小,因为,

在内部存储中:

  1. 总内存--1007
  2. 可用内存 - 683

在外部存储中:

  1. 总记忆 - 1763
  2. 可用内存 - 1554

但在Tablet中,我看到了设置.外部存储大小为8GB.但是,当我通过编程方式进行测试时,它向我展示了1.7 GB.

查找外部存储大小的步骤是什么?

storage android sd-card android-external-storage

11
推荐指数
1
解决办法
7468
查看次数

在多个Android应用程序之间共享和保存数据

我正在开发一组需要共享常见状态和配置设置的复杂Android应用程序.

例如,请参阅此图片解释我的方案:

在此输入图像描述

我希望APP 1,APP 2和APP 3能够访问(读/写)公共存储区域的数据.此外,我需要卸载保护,即我不希望在用户卸载任何应用程序时删除数据.

我已经阅读过有关SQLite数据库,ContentProviders和内部和外部存储的文章,但上述每种方法都有如下所列的缺点:

  • SQLite数据库:数据库在应用程序卸载时删除,对每个应用程序都是私有的
  • ContentProvider:删除包含ContentProvider的应用程序时删除的数据
  • 内部存储:对每个应用程序都是私有的,并且应用程序卸载时会删除数据(http://developer.android.com/training/basics/data-storage/files.html#InternalVsExternalStorage)
  • 外部存储:不可靠(用户可能会删除SD卡)
  • 存储在服务器上:不可能,用户可能没有可靠的互联网连接

编辑:

我不希望任何依赖Google Play服务,因为我将通过Play商店和第三方下载分发应用程序.

请帮帮我.

sqlite android android-contentprovider android-external-storage

11
推荐指数
1
解决办法
1658
查看次数

DownloadManager无法使用Pie下载到三星的外部存储上

在Android 9(Pie)上的Samsung Galaxy S9和S9 +上,使用Android DownloadManager将文件下载到外部存储失败。

下载适用于具有Android 8的三星设备或具有Android 9(例如Pixel 2)的其他设备

我已将以下权限添加到清单中:

 "android.permission.WRITE_EXTERNAL_STORAGE", 
 "android.permission.READ_EXTERNAL_STORAGE",
 "android.permission.INTERNET"
Run Code Online (Sandbox Code Playgroud)

我还已在运行时请求READ / WRITE_EXTERNAL_STORAGE权限。

文件路径是:/storage/4295-DDD5/Android/data/com.example.myapplication/files/filename.file 并且该文件路径 存在,我已经使用AndroidStudio的设备文件资源管理器创建了它

创建下载的方法:

public void downloadFile(String url, String filePath) {
   DownloadManager mDownloadManager = 
   (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);

   DownloadManager.Request request = new 
   DownloadManager.Request(Uri.parse(url));

   request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | 
   DownloadManager.Request.NETWORK_WIFI);

   request.setVisibleInDownloadsUi(true);

   request.setDestinationUri(Uri.parse("file://" + filePath));

   mDownloadManager.enqueue(request);
}
Run Code Online (Sandbox Code Playgroud)

预期的结果是将指定文件从url下载到filePath,而不是在日志中出现以下错误:

D/DownloadManager: [8616] Starting com.example.myapplication
W/DownloadManager: [8616] Stop requested with status FILE_ERROR: Failed to generate filename: java.io.IOException: Permission denied
D/DownloadManager: [8616] Finished with status WAITING_TO_RETRY
V/DownloadManager: MIME Type = application/octet-stream
I/DownloadManager: Download 8616 …
Run Code Online (Sandbox Code Playgroud)

android android-download-manager android-external-storage samsung-galaxy android-9.0-pie

10
推荐指数
1
解决办法
773
查看次数