我开始在Delphi XE5中为android开发应用程序,遇到了一些问题。
我真的不懂怎么找路。在我设置了写入和读取外部存储的权限后,我尝试获取路径,以便查看我将创建的文件保存在何处,我得到的结果如下:
对于系统。尤蒂尔斯。第四-
GetDocumentsPath; - /data/data/com.myapp.app1/files
GetDownloadsPath; - /storage/emulated/0/Android/data/com.myapp.app1/files/Download
GetHomePath; - /data/data/com.myapp.app1/files
GetSharedDocumentsPath; - /storage/emulated/0/Android/data/com.myapp.app1/files
GetLibraryPath; - /data/data/com.myapp.app1/files
GetPublicPath; - /storage/emulated/0/Android/data/com.myapp.app1/files
GetPicturesPath; - /storage/emulated/0/Android/data/com.myapp.app1/files/Pictures
据我从其他主题了解,GetDocumentsPath应该是默认的sdcard路径,下载应该是sdcard/Downloads,但它使用/Android/data/application的文件夹/文件/在这里创建的文件夹已经存在于sdcard本身。
/模拟的/0/实际上与我手机上的/sdcard/相同,如果这让任何人感到困惑的话(以防万一……)。
它有几个快捷方式,据我所知,存储/仿真/0/,存储/sdcard0/,也可以从root的文件夹直接访问sdcard/(但我猜没有root访问的应用程序只有默认访问存储/文件夹,因此存储/sdcard0和仿真/0文件夹存在;不知道为什么重复的快捷键到相同的文件夹,虽然...(
[[还有存储/模拟/遗留/,这似乎也指向同一个文件夹,但我从来没有碰过它,因为我曾经有一些问题与文件重复和奇怪的音乐库行为,就在我根植和格式化它之前。从未想过到底发生了什么,但甚至不在乎。事实是,模拟文件夹似乎是邪恶的,无法解释;)]]
此外,这些路径问题是否与以下事实有关:手机没有挂载选项,只有MTP,或者是android 4.3,或者。。。。?
谢谢
//更新:如鲁弗爵士建议的那样,关于这个和屏幕分辨率的问题被分割开来。
更新:看起来像是硬编码“/sdcard/filename。“扩展”作为路径字符串完成了这项工作,但我不确定在应用程序中硬核位置有多明智…://
下面的函数将从GetShared path获得默认SD卡路径;第一种方法很简单,只需从SharedMusic的固定路径获取SDCard路径;
function GetSDCardPath: string;
var MusicPathLength: integer;
MusicPath, SDCardPath: string;
begin
MusicPath:=System.IOUtils.TPath.GetSharedMusicPath;
MusicPathLength:=Length(MusicPath);
SDCardPath:=Copy(MusicPath, 0, MusicPathLength-5);
Result:=SDCardPath;
end;
我可以添加从任何提供的路径结果中提取sdcard路径的函数,但我认为上面的示例是您可以使用的最简单的,对我来说是完美的。谢谢@Arnold的帮助。:)
尽量不要硬编码路径。对于不同的Android平台,外部存储的路径可能会有所不同,您将错过跨平台编程的优势。当我开始为Android系统编程时,我写了一个小应用程序“在哪里”,目标是列出所有平台的所有“特殊”目录。这是非常有用的,因为我不知道这些目录甚至Windows,更不用说Android。在您的示例中,您错过了共享目录。这将返回路径到/存储/仿真/0/音乐/
为GetSharedMusicPath
,以此类推为电影
,下载
等。我以为我的银河标签不同,但我不确定。只需删除姓氏,您就拥有了外部存储的路径。
如果你想读写到你的外部存储(在Project|Options|Android中的某个地方),请注意你有READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
设置。我不知道Android是否允许您在外部存储根中写入,您必须自己尝试。
uses System.IOUtils;
procedure THeaderFooterForm.Loaded;
begin
inherited Loaded;
TPath.SetApplicationPath ('WhereAppTest');
add_path (TPath.GetTempPath, 'GetTempPath');
add_path (TPath.GetHomePath, 'GetHomePath');
add_path (TPath.GetDocumentsPath, 'GetDocumentsPath');
add_path (TPath.GetApplicationPath ('WhereAppTest'), 'GetApplicationPath');
add_path (TPath.GetSharedDocumentsPath, 'GetSharedDocumentsPath');
add_path (TPath.GetLibraryPath, 'GetLibraryPath');
add_path (TPath.GetCachePath, 'GetCachePath');
add_path (TPath.GetPublicPath, 'GetPublicPath');
add_path (TPath.GetPicturesPath, 'GetPicturesPath');
add_path (TPath.GetSharedPicturesPath, 'GetSharedPicturesPath');
add_path (TPath.GetCameraPath, 'GetCameraPath');
add_path (TPath.GetSharedCameraPath, 'GetSharedCameraPath');
add_path (TPath.GetMusicPath, 'GetMusicPath');
add_path (TPath.GetSharedMusicPath, 'GetSharedMusicPath');
add_path (TPath.GetMoviesPath, 'GetMoviesPath');
add_path (TPath.GetSharedMoviesPath, 'GetSharedMoviesPath');
add_path (TPath.GetAlarmsPath, 'GetAlarmsPath');
add_path (TPath.GetSharedAlarmsPath, 'GetSharedAlarmsPath');
add_path (TPath.GetDownloadsPath, 'GetDownloadsPath');
add_path (TPath.GetSharedDownloadsPath, 'GetSharedDownloadsPath');
add_path (TPath.GetRingtonesPath.Empty, 'GetRingtonesPath');
add_path (TPath.GetSharedRingtonesPath, 'GetSharedRingtonesPath');
FMediaPlayer := TMediaPlayer.Create(Self);
end; // Loaded //
procedure THeaderFooterForm.add_path (path, header: string);
var
item: TListViewItem;
bitmap: TBitmap;
begin
item := List_Paths.Items.Add;
item.ButtonText := 'button';
item.Detail := path;
item.Text := header;
end; // add_path //
01-20 08:55:14.787:W/System.err(1383):at libcore.io.iobridge.open(iobridge.java:409)01-20 08:55:14.787:W/System.err(1383):at java.io.fileInputStream.(fileInputstream.java:78)01-20 08:55:14.827:W/Syste
我对firebase存储是新手,想知道什么是最好的做法。我想上传图像到firebase云存储,并返回了一个下载url,然后我存储到FireStore。下载网址是永久的吗?其他用户将从firestore读取以获得下载图像的url。 但是当我想从CloudStorage中删除图像时,我只有下载url,而没有文件路径。所以我要删除它吗? 如果我存储的是文件路径,如何获得下载url?
问题内容: 我在Eclipse中保存密码时遇到问题。我的密码都没有被“记住”,我发现Eclipse试图将其保存在Windows帐户无法访问的文件夹中。 它尝试保存到 一个不存在的目录,我的Win帐户也无法将其写入该目录。 我发现我的user.home变量设置为D:\ Users \ Administrator。我的猜测很疯狂,因为安装Java的是Administrator帐户。 所以我的问题是-我
我正在尝试将我上传到Tomcat的文件的路径存储到我的MySQL数据库中。我已经存储了名为filepath的字符串的路径,但是当我执行程序时,我收到了以下错误: “您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第1行的':\User\Nick\Desktop\bot.png)'附近使用的正确语法”我使用的代码的一部分: 我想问题与路径的格式有关,但我对java很陌生,所以我
问题内容: 我有两节课: MyApplication 库 该库已被编译为Library.class,并且源代码不再可用。我现在正在尝试从源代码编译MyApplication。MyApplication取决于库。该库的软件包名称为org.myCompany。我尝试将我的类路径设置为以下内容: 产生以下javac编译器错误消息: 所以我将类路径更改为: 产生完全相同的错误消息。 如何设置Windows
我正在尝试在Android 8 API Level 26 emulator上运行Xamarin Android应用程序。当我试图将日志写入文件时,这是一个例外。 例外: 系统UnauthorizedAccessException:对路径“/storage/emulated/0/abc.txt”的访问被拒绝 代码: 我也给了和权限。 目标Android版本:Android8.0 API级别26 Or