UPDATE
我有运行8.0.0 T-Mobile的三星Galaxy S8 +,它在运行8.0.0时运行良好
我的三星Galaxy S9 +运行8.0.0 Verizon,每次都有非法参数失败.
我的三星Galaxy S9 +运行8.0.0 T-Mobile没有问题,工作正常
所以这可能是OEM特定的型号问题,但不知道如何解决它.我也试过重启电话,没有改变结果.
此外,我从Evernote中打开了公共下载并将文件保存为Note的附件,这告诉我Evernote能够正常访问公共目录并附加文件,因此可以在设备上执行.让我相信它与代码相关.
所以我最近升级了一个工作得很好的项目,现在它已经出现了一个错误,它正在使用构建工具28进行编译,用于最新版本的Android.
所以我一直使用这个PathUtil从隐含的意图中获取我需要的文件路径,以便从用户那里获取文件.我将在下面分享我正在使用的代码的链接.
它只是一个实用程序类,它检查提供程序权限并获取您尝试读取的文件的绝对路径.
当用户从公共下载目录中选择一个文件时,它返回onActivityResult:
content://com.android.providers.downloads.documents/document/2025
Run Code Online (Sandbox Code Playgroud)
现在,nice实用程序解析了这个并告诉我这是一个下载目录文件,并且是一个id为2025的文档.感谢实用程序,这是一个很好的开始.
接下来是使用内容解析器来查找文件绝对路径.这是以前的工作,但不再是:(.
现在路径实用程序只使用他们最有可能从核心库本身获得的合同数据.我试图导入提供程序类以避免静态字符串,但它似乎不可用,所以我想简单地使用匹配字符串是现在最好的方法.
以下是提供内容解析器所有访问权限的核心DownloadProvider供参考. DownloadProvider
注*此DownloadProvider是Androids,不是我的
以下是为contentProvider构建Uri的代码
val id = DocumentsContract.getDocumentId(uri)
val contentUri = ContentUris.withAppendedId(Uri.parse(PUBLIC_DOWNLOAD_PATH), id.toLong())
return getDataColumn(context, contentUri, null, null)
Run Code Online (Sandbox Code Playgroud)
来电参考:
private fun getDataColumn(context: Context, uri: Uri, selection: String?, selectionArgs: Array<String>?): String? {
var cursor: Cursor? = null
val column = "_data"
val projection = arrayOf(column)
try {
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
if …Run Code Online (Sandbox Code Playgroud) 我一直在努力将垂直放置的 3d 模型 GLB 格式正确放置在垂直表面上。
澄清一下,我不是指识别垂直表面的困难,这本身就是一个完全不同的问题。
删除设置的常见样板以最小化这篇文章。
我正在使用一个扩展 ARFragment 的片段。
class SceneFormARFragment: ArFragment() {
Run Code Online (Sandbox Code Playgroud)
当然,我已经提供了一些调整的配置。
override fun getSessionConfiguration(session: Session?): Config {
val config = super.getSessionConfiguration(session)
// By default we are not tracking and tracking is driven by startTracking()
config.planeFindingMode = Config.PlaneFindingMode.DISABLED
config.focusMode = Config.FocusMode.AUTO
return config
}
Run Code Online (Sandbox Code Playgroud)
为了开始和停止我的 AR 体验,我在片段中编写了几个方法,如下所示。
private fun startTracking() = viewScope.launchWhenResumed {
try {
arSceneView.session?.apply {
val changedConfig = config
changedConfig.planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
configure(changedConfig)
}
logv("startTracking")
planeDiscoveryController.show()
arSceneView.planeRenderer.isVisible = true
arSceneView.cameraStreamRenderPriority = 7
} catch (ex: …Run Code Online (Sandbox Code Playgroud)