小编y39*_*390的帖子

架构组件库中的 viewModel() 和 hiltViewModel() 有什么区别?

据我所知,在使用 Jetpack Compose 和 Hilt 时,有两种创建/访问 viewModel 实例的方法;viewModel() 和 hiltViewModel()。我不明白应该使用哪个,因为它们似乎做同样的事情。viewModel() 的文档表明它会自动使用 Hilt 通过 @HiltViewModel 构建的视图模型。那么这两种实现之间到底有什么区别以及什么时候应该使用它们呢?

android dependency-injection viewmodel android-viewmodel dagger-hilt

6
推荐指数
0
解决办法
256
查看次数

如何在 Android 中检索并打开通过 MediaStore API 保存下载的 PDF 文件?

我正在从服务器下载 PDF 文件并将响应正文字节流传递到下面的函数中,该函数将 PDF 文件成功存储在用户下载文件夹中。

@RequiresApi(Build.VERSION_CODES.Q)
fun saveDownload(pdfInputStream: InputStream) {
    val values = ContentValues().apply {
        put(MediaStore.Downloads.DISPLAY_NAME, "test")
        put(MediaStore.Downloads.MIME_TYPE, "application/pdf")
        put(MediaStore.Downloads.IS_PENDING, 1)
    }

    val resolver = context.contentResolver
    val collection = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
    val itemUri = resolver.insert(collection, values)
    if (itemUri != null) {
        resolver.openFileDescriptor(itemUri, "w").use { parcelFileDescriptor ->
            ParcelFileDescriptor.AutoCloseOutputStream(parcelFileDescriptor)
                .write(pdfInputStream.readBytes())
        }
        values.clear()
        values.put(MediaStore.Downloads.IS_PENDING, 0)
        resolver.update(itemUri, values, null, null)
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,一旦该函数返回,我想打开保存的 PDF 文件。我尝试了多种方法来使其正常工作,但选择器总是说没有任何内容可以打开文件。我认为要么仍然存在权限问题(也许我使用的 FileProvider 错误?),要么路径错误,或者可能完全是其他问题。

以下是我尝试过的几个示例:

fun uriFromFile(context: Context, file: File): Uri {
    return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
}
Run Code Online (Sandbox Code Playgroud)

A)

val openIntent …
Run Code Online (Sandbox Code Playgroud)

java android android-intent kotlin android-fileprovider

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