繁体   English   中英

使用Unity(C#)Android应用程序在GearVR中检测USB驱动器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM