正如标题所述,我有一个针对Samsung Gear VR的Unity3D应用程序,我希望能够检测到什么东西插入Gear上的USB-C端口。
在这里和其他相关论坛上搜索我可能已经找到了使用Android Intents(ACTION_USB_DEVICE_ATTACHED)执行此操作的方法,但它看起来不像是Unity应用程序的选项(或者至少我不能找到一种方法来使用它,Unity论坛似乎再次失败了)。
现在,我基本上正在跳过“检测”步骤,而是让一个枚举器在后台运行适当的场景,检查Android上“/ storage”中的任何文件夹是否有名为“的子文件夹”测试“.Android似乎将来自外部驱动器的数据存储在”/ storage“中,文件夹名称看似随机的字母数字字符,所以我发现确定它是否是我正在寻找的驱动器的唯一方法是检查1层深,找到“test”文件夹。
IEnumerator DirectoryReadTest()
{
Debug.Log("Running DirectoryReadTest...");
while (true)
{
DirectoryInfo info = new DirectoryInfo("/storage");
DirectoryInfo[] subs = info.GetDirectories();
foreach (DirectoryInfo d in subs)
{
Debug.Log("Directory: " + d.Name);
DirectoryInfo[] subd = d.GetDirectories("test");
if (subd.Length > 0)
{
Debug.Log("Found a test directory in storage.");
usbExternalDirectory = subd[0];
break;
}
}
yield return null;
}
}
此方法目前有效,但意味着我必须在后台持续运行此进程,因此效率不高。我似乎无法过滤掉那些正在寻找“如何判断Android手机是否已插入计算机USB”的搜索结果的谷歌搜索结果,所以我希望能找到正确方向的任何指针。
答案 0 :(得分:0)
虽然不是直接的答案,但有两条建议如何优化您的代码: 我相信你可以返回WaitForSeconds(1)或(2),而不是每帧都进行检查,所以已经快了50个。 其次,DirectoryInfo非常有效,特别是在闪存驱动器上,它的Debug.Log会给你循环(每个调试日志执行一个堆栈跟踪转储),不会在每一帧中调试.log,其中一个最被低估的表演杀手