Pro*_*ofK 11 android file-transfer android-file
我正在编写一个小应用程序,它可以读取必须定期从设备外部源写入存储设备的文件,无论是USB,蓝牙,Airdroid等.从我读过的,没有什么可以写到内部存储器.我想管理内部存储中的文件以获取访问隐私.
我的第一个解决方案是允许用户将文件写入外部存储器,然后点击按钮将其传输到内部存储器的活动.如果在n分钟内没有发生这种情况,则会破坏外部存储上的文件.但是,我发现这getExternalStorageDirectory是非常无用的,因为设备模仿内部存储上的外部存储,Android无法知道是否以及如何完成.
然而,我想知道是否没有某种内置活动允许用户直接从内部存储上传或下载文件,但不能免费访问内部存储的整个文件结构,就像他们使用内部存储一样.
作为最后的手段,也许我的应用程序可以通过TCP连接接收文件并将其写入内部存储本身.它很乱,但试图找到一张SD卡也是如此.请参阅问题查找外部SD卡位置.
新功能:此练习的目的是查找SD卡上目录中的所有.csv文件,让用户选择一个,处理它,并将输出文件写入SD卡.用户将输入"权重"值,该值将用于处理文件的计算中.
但是,由于Android在提供真正外部存储(即SD卡)的位置方面是如此不可靠,我想尝试将文件存储在内部存储中,其中Android似乎对该存储的位置更加诚实和可靠.
TLDR:getExternalStorageDirectory()并且getExternalFilesDirs()[0](API 19+)应该返回“主要”存储位置,即内部存储。
编辑:如果您只想写入eMMC并且不关心它是私有的,只需使用getFilesDir()它并保证您正在写入eMMC。
解释:
为了避免晦涩和方便,我将使用以下术语
/data/data/package name如果我正确理解您的问题,您不想写入PrivateStorage,因为它不允许其他应用程序访问该数据。因此,目标是写入eMMC ,更具体地说,是可公开访问的eMMC ,而不是在 eMMC 应用程序的私有空间中。
根据 Android 文档(API 1),
Environment.getExternalStorageDirectory()返回主要外部存储目录。如果用户已将其安装在计算机上、已从设备中删除或发生了其他问题,则当前可能无法访问此目录。您可以使用 getExternalStorageState() 确定其当前状态。
根据API 19 文档,
您现在可以在辅助外部存储介质上读取和写入特定于应用程序的文件,例如当设备同时提供模拟存储和 SD 卡时。新方法 getExternalFilesDirs() 的工作方式与现有的 getExternalFilesDir() 方法相同,只是它返回 File 对象数组。返回的 File 数组中的第一个条目被视为设备的“主要”外部存储,与 File 相同由现有方法(例如 getExternalFilesDir())返回。
总而言之,getExternalStorageDirectory()和 都getExternalFilesDirs()[0] 应该返回“主要”存储位置,即eMMC。但实际上,您可以注意到,对于某些手机(KarbonnTitiniumS2、XoloX3000 和许多其他手机),它返回的内容可能不一定是eMMC
以下是一些快照来支持这句话:这款手机 TitaniumS2 运行的是 4.2,所以我无法使用getExternalFilesDirs()
您还可以注意到,出于同样的原因,ES Explorer在新旧版本中都错误地将其识别/sdcard0为内部存储(eMMC)和/sdcard1外部存储(SD ),并且确实继续告诉用户这sdcard0是内部存储。
此外,还提出了寻找非主(SD)存储的问题。
似乎没有用于查找非主外部存储设备的 API 函数,并且 google 无意解决这种情况,让应用程序使用一些 hacky 解决方法,例如解析所有当前安装的文件系统。对于当前的操作系统来说,无法正确支持像访问插入的 USB 记忆棒上的文件这样的基本功能是非常糟糕的。
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |