[英]Detecting USB drive in GearVR with Unity (C#) Android application
如标题所示,我有一个用于Samsung Gear VR的Unity3D应用程序,我希望能够检测何时将某些东西插入Gear的USB-C端口。
在这里和其他相关论坛上搜索,我可能已经找到了一种使用Android Intents(ACTION_USB_DEVICE_ATTACHED)的方法,但看起来这不是Unity应用程序的一种选择(或者至少我找不到方法)使用它,Unity论坛似乎又关闭了)。
现在,我基本上是跳过“检测”步骤,而是在适当的场景中在后台运行一个枚举器,以检查Android上“ / storage”中的任何文件夹是否具有名为“ test”的子文件夹。 Android似乎将来自外部驱动器的数据存储在“ / storage”中,其文件夹名称看似随机的字母数字字符,因此,我确定确定是否要查找的唯一驱动器是检查1层深处找到“测试”文件夹。
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之类的东西”之类的google结果,因此,我希望您能向正确的方向提出建议。
虽然不是直接的答案,但是有两个建议可以优化代码:建议您可以返回WaitForSeconds(1)或(2),而不是每帧都放弃检查,这样已经快了50倍。 其次,DirectoryInfo非常有效,尤其是在闪存驱动器上,它的Debug.Log会引起您的麻烦(每个调试日志都会执行一次堆栈跟踪转储),永远不要在每个帧中都运行debug.log,这是被低估了的性能杀手之一
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.