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

时间:2018-05-15 18:08:04

标签: c# android unity3d gear-vr

正如标题所述,我有一个针对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”的搜索结果的谷歌搜索结果,所以我希望能找到正确方向的任何指针。

1 个答案:

答案 0 :(得分:0)

虽然不是直接的答案,但有两条建议如何优化您的代码: 我相信你可以返回WaitForSeconds(1)或(2),而不是每帧都进行检查,所以已经快了50个。 其次,DirectoryInfo非常有效,特别是在闪存驱动器上,它的Debug.Log会给你循环(每个调试日志执行一个堆栈跟踪转储),不会在每一帧中调试.log,其中一个最被低估的表演杀手