尝试以字符串形式返回 Unity 中的 SDCard 路径。
AndroidJavaObject SDPath = new AndroidJavaObject("android.os.Environment");
AndroidJavaObject SDPath1 = SDPath.Call<AndroidJavaObject("getExternalStorageDirectory",null);
string path_str = SDPath1.Call<string>("getAbsolutePath");
但是它似乎不起作用。我尝试将字符串传递给 UI 元素,但没有呈现任何内容。我已经测试了 UI 元素,并且该方面的代码正在运行。有什么想法吗?
谢谢!
最佳答案
编辑/修复:统一更新使函数调用不明确
我遇到了同样的问题,发现该方法有效,但不是您期望的那样。 “GetExternalStorageDirectory”将为您提供外部存储的可用路径之一,在大多数情况下,它是模拟外部存储的路径,而不是 SD 卡的路径。
要获取 SD 卡的路径,您必须调用“GetExternalStorageDirectories”。这将为您提供所有可用外部存储、模拟存储和 SD 卡的列表。
AndroidJavaObject[] externalFilesDirectories = context.Call<AndroidJavaObject[]>("getExternalFilesDirs", (object)null);
之后,您只需使用 java 函数“isExternalStorageRemovable”和“isExternalStorageEmulated”来区分模拟存储和外部存储。如果它不是模拟且可移动的,那么您找到了 SD 卡的路径。
bool isRemovable = environment.CallStatic<bool>("isExternalStorageRemovable", directory);
bool isEmulated = environment.CallStatic<bool>("isExternalStorageEmulated", directory);
// We found the sd card!
if (isRemovable && isEmulated == false)
return directory;
如果将其包装到一个函数中,您将得到如下所示的内容:
private static string GetAndroidExternalFilesDir()
{
using (AndroidJavaClass unityPlayer =
new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject context =
unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
// Get all available external file directories (emulated and sdCards)
AndroidJavaObject[] externalFilesDirectories =
context.Call<AndroidJavaObject[]>
("getExternalFilesDirs", (object)null);
AndroidJavaObject emulated = null;
AndroidJavaObject sdCard = null;
for (int i = 0; i < externalFilesDirectories.Length; i++)
{
AndroidJavaObject directory = externalFilesDirectories[i];
using (AndroidJavaClass environment =
new AndroidJavaClass("android.os.Environment"))
{
// Check which one is the emulated and which the sdCard.
bool isRemovable = environment.CallStatic<bool>
("isExternalStorageRemovable", directory);
bool isEmulated = environment.CallStatic<bool>
("isExternalStorageEmulated", directory);
if (isEmulated)
emulated = directory;
else if (isRemovable && isEmulated == false)
sdCard = directory;
}
}
// Return the sdCard if available
if (sdCard != null)
return sdCard.Call<string>("getAbsolutePath");
else
return emulated.Call<string>("getAbsolutePath");
}
}
}
关于c# - 如何在 Android 设备上访问 Unity 中的 SDCard 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40140495/