相关疑难解决方法(0)

找到可移动SD卡的位置

是否有通用的方法来查找外部SD卡的位置?

请不要与外部存储混淆.Environment.getExternalStorageState()返回内部SD挂载点的路径,如"/ mnt/sdcard".但问题是关于外部SD.如何获得像"/ mnt/sdcard/external_sd"这样的路径(它可能因设备而异)?

我想我将以mount文件系统名称过滤命令结束.但我不确定这种方式是否足够强大.

android external sd-card

199
推荐指数
11
解决办法
25万
查看次数

如何获得Android 4.0+的外部SD卡路径?

三星Galaxy S3有一个extrenal SD卡插槽,安装到/mnt/extSdCard.

我的问题是:如何通过类似的方式获得这条路径Environment.getExternalStorageDirectory()?这将返回mnt/sdcard,我找不到外部SD卡的API.(或某些平板电脑上的可移动USB存储器)

谢谢!

android android-sdcard

91
推荐指数
9
解决办法
17万
查看次数

如何检查Android设备上的可用空间?在SD卡上?

我如何检查Android设备上剩下多少MB或GB?我正在使用JAVA和android SDK 2.0.1.

是否有任何系统服务会暴露这样的事情?

java android

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

在内存上获得可用空间

是否可以通过Android SDK获取Android设备(而非SD卡)上的可用内存量?

如果是这样,怎么样?

android diskspace

39
推荐指数
4
解决办法
4万
查看次数

如何找到Android上剩余的可用存储空间(磁盘空间)?

我试图找出运行我的应用程序的Android手机上的可用磁盘空间.有没有办法以编程方式执行此操作?

谢谢,

storage android diskspace disk

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

如何使用新的Lollipop API访问所有SD卡?

背景

从Lollipop开始,应用程序可以访问真正的SD卡(在Kitkat上无法访问之后,并且在之前的版本中尚未获得官方支持),正如我在此处所述.

问题

因为看到支持SD卡的Lollipop设备变得非常罕见,并且因为模拟器实际上没有能力(或者它?)来模拟SD卡支持,所以我花了很长时间来测试它.

无论如何,似乎不是使用普通的File类来访问SD卡(一旦获得了它的许可),你需要使用Uris来使用它,使用DocumentFile.

这限制了对正常路径的访问,因为我找不到将Uris转换为路径的方法,反之亦然(加上它非常烦人).这也意味着我不知道如何检查当前的SD卡是否可访问,因此我不知道何时要求用户允许读取/写入(或向他们).

我试过的

目前,这就是我获取所有SD卡的路径:

  /**
   * returns a list of all available sd cards paths, or null if not found.
   *
   * @param includePrimaryExternalStorage set to true if you wish to also include the path of the primary external storage
   */
  @TargetApi(Build.VERSION_CODES.HONEYCOMB)
  public static List<String> getExternalStoragePaths(final Context context,final boolean includePrimaryExternalStorage)
    {
    final File primaryExternalStorageDirectory=Environment.getExternalStorageDirectory();
    final List<String> result=new ArrayList<>();
    final File[] externalCacheDirs=ContextCompat.getExternalCacheDirs(context);
    if(externalCacheDirs==null||externalCacheDirs.length==0)
      return result;
    if(externalCacheDirs.length==1)
      {
      if(externalCacheDirs[0]==null)
        return result;
      final String storageState=EnvironmentCompat.getStorageState(externalCacheDirs[0]);
      if(!Environment.MEDIA_MOUNTED.equals(storageState))
        return …
Run Code Online (Sandbox Code Playgroud)

android uri file android-sdcard documentfile

25
推荐指数
1
解决办法
5898
查看次数

如何获取Android设备的已安装外部存储列表

在这里,我们正在为Android电视盒开发Android应用程序.如何获取已安装的外部存储列表USB stick, SDCARD and SATA HDD.

android

21
推荐指数
4
解决办法
3万
查看次数

如何获得每个StorageVolume的免费和总大小?

背景

Google不幸地计划破坏存储权限,以使应用程序无法使用标准File API(和文件路径)访问文件系统。许多人反对它,因为它改变了应用程序访问存储的方式,并且在许多方面都是受限制的有限API。

因此,如果我们想处理各种问题,我们将需要在将来的某些Android版本上完全使用SAF(存储访问框架)(在Android Q上,我们至少可以暂时使用一个标志来使用常规存储权限)。存储卷并到达那里的所有文件。

因此,例如,假设您要制作一个文件管理器并显示设备的所有存储卷,并为每个文件显示有多少总字节和可用字节。这样的事情看起来非常合法,但是由于我找不到找到这种方法的方法。

问题

从API 24(此处)开始,我们终于可以列出所有存储卷,如下所示:

    val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
    val storageVolumes = storageManager.storageVolumes
Run Code Online (Sandbox Code Playgroud)

事实是,此列表上的每个项目都没有功能来获取其大小和可用空间。

但是,以某种方式,Google的 Google提供的文件”应用程序设法获得了该信息,而没有获得任何形式的许可:

在此处输入图片说明

并在装有Android 8的Galaxy Note 8上进行了测试。甚至没有最新版本的Android。

因此,这意味着即使在Android 8上,也应该有一种无需任何许可即可获取此信息的方法。

我发现了什么

有一些类似于获得自由空间的东西,但是我不确定是否确实如此。虽然如此。这是它的代码:

    val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
    val storageVolumes = storageManager.storageVolumes
    AsyncTask.execute {
        for (storageVolume in storageVolumes) {
            val uuid: UUID = storageVolume.uuid?.let { UUID.fromString(it) } ?: StorageManager.UUID_DEFAULT
            val allocatableBytes = storageManager.getAllocatableBytes(uuid)
            Log.d("AppLog", "allocatableBytes:${android.text.format.Formatter.formatShortFileSize(this,allocatableBytes)}")
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我找不到类似的东西来获取每个StorageVolume实例的总空间。假设我对此是正确的,我已经在这里提出了要求。

您可以在我对此问题写的答案中找到更多我所找到的内容,但是目前,这是所有变通办法的结合,这些工作不是变通办法,而是在某些情况下有效。 …

android storage-access-framework

17
推荐指数
3
解决办法
587
查看次数

如何获得外部存储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
查看次数

路径错误无效:获取外部存储器大小

当我调用它来获取外部存储器详细信息时,我收到如下错误.

05-07 16:55:07.710: E/AndroidRuntime(22624): FATAL EXCEPTION: main java.lang.IllegalArgumentException: Invalid path: /storage/emulated/0
05-07 16:55:07.710: E/AndroidRuntime(22624):    at android.os.StatFs.doStat(StatFs.java:46)
05-07 16:55:07.710: E/AndroidRuntime(22624):    at android.os.StatFs.<init>(StatFs.java:39)
Run Code Online (Sandbox Code Playgroud)

在我将我的机器人更新到SAMSUNG Galaxy S3 4.3之前,这是有效的.我跟着这篇文章.这是我的代码:

// getting available memory
public static String getAvailableExternalMemorySize() {
    if (externalMemoryAvailableBool()) {
        // File path =
        // Environment.getExternalStorageDirectory().getAbsolutePath();
        StatFs stat = new StatFs(Environment.getExternalStorageDirectory()
                .getAbsolutePath());
        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
        return formatSize(availableBlocks * blockSize);

    } else {
        return ERROR;
    }

}

// getting total memory
public static String getTotalExternalMemorySize() {

    if …
Run Code Online (Sandbox Code Playgroud)

android

7
推荐指数
1
解决办法
2935
查看次数

android.system.ErrnoException错误

我正在尝试使用以下代码获取内部存储详细信息(用作内部存储器的存储).

public void getinternalstorage() {
        StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
        double bytesavalible = (double) stat.getBlockSizeLong() * (double) stat.getAvailableBlocksLong();
        final double gb = bytesavalible / (1024 * 1024 * 1024);
        double total = (double) stat.getBlockSizeLong() * stat.getBlockCountLong();
        final double totalgb = total / (1024 * 1024 * 1024);
        final double per = (100 - (gb / totalgb) * 100);
        update_inte((int) (per * 1), round(totalgb, 2), round((gb), 2));
        TextView text2written = (TextView) findViewById(R.id.inter);
        text2written.setText(String.valueOf(round((totalgb - gb), 2)) + " GB " + …
Run Code Online (Sandbox Code Playgroud)

java android sd-card android-sdcard

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

Android检查应用启动时存储空间是否不足

我想我可以在广播接收器中使用Intent.ACTION_DEVICE_STORAGE_LOW,以便在设备存储空间不足时通知我.这里解释一下.

我知道我可以找到用户在这里有多少空间.

但是,我希望尽可能避免设置可用空间不足的边界.当存储空间不足时,操作系统会向用户发出通知.

问题:如果操作系统认为可用空间不足,是否只在启动时显示应用程序内错误消息?

android local-storage

3
推荐指数
1
解决办法
1287
查看次数

在写入内部存储之前检查存储是否已满

我使用内部数据(应用程序的私有数据)来保存数据。

但是,如果设备存储空间不足,如何在保存之前检查存储空间是否已满?如果写入文件的数据非常大,导致设备的存储空间已满,我该如何检查并通知用户/防止应用程序显示强制关闭对话框?

Android 系统是否在此问题上做任何事情(例如显示一条消息,告诉用户设备上没有更多空间)?

主要关注的是确保检查在适用的驱动器上进行;如果应用程序已移至 SD 卡或其他外部存储单元,则应根据剩余内存检查该驱动器

示例场景:设备剩余 238KB。数据保存到 10 个文件中。每个文件为30-40KB。假设平均为35KB/文件,可以写入6个文件,而最后4个不能。我该如何处理此类问题?

android saving-data android-internal-storage

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