小编Sam*_*Sam的帖子

访问公共下载文件onActivityResult Android 28三星Galaxy S9 +(Verizon)


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从隐含的意图中获取我需要的文件路径,以便从用户那里获取文件.我将在下面分享我正在使用的代码的链接.

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)

android kotlin android-permissions android-storage

6
推荐指数
1
解决办法
1087
查看次数

如何使用重力在 Android Sceneform 级别中定向 GLTF

我一直在努力将垂直放置的 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)

android orientation kotlin arcore sceneform

5
推荐指数
1
解决办法
519
查看次数