4

我在“/sdcard/Android/obb/com.example.obbtest/vid-exp1.obb”下有一个扩展文件。它包含一个 MP4 文件,我想挂载 .obb 来读取该文件。

这就是我正在做的安装它:

String obbDir = "/sdcard/Android/obb/com.example.obbtest/vid-exp1.obb";

.

StorageManager storage = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
storage.mountObb(obbDir, null, listener); 

这是监听器代码:

OnObbStateChangeListener listener = new OnObbStateChangeListener() {
        @Override
            public void onObbStateChange(String path, int state) {
                if (state == OnObbStateChangeListener.MOUNTED) {
                    toastString("Mounted! According to the listener");
                    //Test it with the isObbMounted()
                    if (storage.isObbMounted(obbDir)) {
                        toastString("Efectively mounted!");
                    } else {
                        toastString("Not really :(");
                    }
                    toastString(storage.getMountedObbPath(obbDir));
                } else {
                    tuestameString("NOT mounted according to the listener");
                } 
            }
        };

不幸的是,我得到的输出是一个吐司,上面写着“已安装!根据听众”,然后是“不是真的:(”。我设计了这个测试,因为当我尝试 getMountedObbPath(obbDir) 时,我得到一个空字符串而不是路径。我已确保 .obb 文件存在以及所有这些,没有它或没有正确的加密密钥,我不会得到“已安装!...”。

我不明白为什么 OnObbStateChangeListener.MOUNTED 是真的,但 isObbMounted(obbDir) 是假的。有谁知道我做错了什么?

4

1 回答 1

2

在三星设备上遇到此问题。当/mnt/sdcard/不是目录而是指向另一个目录的符号链接(在我的情况下是/storage/sdcard0)时,就会发生这种情况。

在这种情况下StorageManager,不使用您指定的 obb 的路径,而是使用已解析符号链接的路径:isObbMounted("/mnt/sdcard/my.obb")返回falseisObbMounted("/storage/sdcard0/my.obb")is true

要访问挂载的 obb,您不能使用路径 obbDir,而应使用onObbStateChange()第一个参数中传递给的路径:isObbMounted(path).

于 2013-10-18T13:47:15.953 回答