我们已经在我们的应用程序中成功使用APK扩展文件技术一段时间,将.obb文件扩展到另一个目录以读取各个部分。我们最终决定尝试通过使用StorageManager进行挂载来直接读取。我们使用的代码在网络上看起来很常见。安装时未调用OnObbStateChangeListener .obb
我们拨打电话:
if (storageManager.mountObb(obbFile.getAbsolutePath(), null, obbListener))
{
Log.d("STORAGE_MNT", "SUCCESSFULLY QUEUED");
}
else
{
Log.d("STORAGE_MNT", "FAILED");
}
,这成功的 “成功排队”。然而obbListener之后永远不会被调用。如果您在logcat的看你看到以下内容:
Calling a method in the system process without a qualified user:
android.app.ContextImpl.bindService:1543
com.android.server.MountService$ObbActionHandler.connectToService:2458
com.android.server.MountService$ObbActionHandler.handleMessage:2337
android.os.Handler.dispatchMessage:102 android.os.Looper.loop:136
我认为这是关系到这个问题,但我一直无法找到太多的为什么没有“合格用户”。有人可以解释一下这里可能会发生什么吗?
我们已验证obbFile.exists()为true。这个文件在那里。
在寻找答案时,我已经看到很多引用来破坏JOBB工具。它似乎也像Android 4.4有一个错误,阻止这个工作(虽然我现在使用4.4.2)。我想知道这是否足够稳定以用于生产代码。
这不适合我。它在mount_bb()调用之前或之后没有被安装,监听器没有被调用,但是在设备管理器中,我可以在/ mnt/obb中看到挂载的目录,所以显然它会挂载它。 –
生成安装请求后,需要1/2秒左右的时间进行安装。我现在进入一个睡眠1/2秒的循环,然后检查它是否被安装。它通常在第一次1/2秒睡眠后安装。我认为你需要返回到事件线程才能通过OnObbStateChangeListener获得通知。 – btschumy
现在它适用于我。不知道是什么改变了它,因为我从头开始。 –