相关疑难解决方法(0)

如何使用 jetpack 撰写导航将位图从一个屏幕传递到另一个屏幕

我正在使用jetpack compose。我有两个屏幕,我想将位图从第一个屏幕发送到第二个屏幕。因此,我将位图转换为字符串并将其作为参数传递:


                            composable(
                                route = "${NavGraph.FilterScreen.route}/{screenShot}",
                                arguments = listOf(navArgument("screenShot") {
                                    this.type = NavType.StringType
                                })
                            ) {
                                FilterScreen(
                                    innerPadding = padding,
                                    navController = navController,
                                    screenShot = it.arguments?.getString("screenShot")
                                )
                            }
Run Code Online (Sandbox Code Playgroud)

我从第一个屏幕导航到第二个屏幕,如下所示:

 navController.navigate(NavGraph.FilterScreen.route + "/${bitmapToString(it)}")
Run Code Online (Sandbox Code Playgroud)

问题是:

看来是因为 Bitmap 的字符串版本太长,导航无法处理它并给出以下错误:

cannot be found in the navigation graph NavGraph(0x0) startDestination={Destination(0x78d845ec) route=home}
Run Code Online (Sandbox Code Playgroud)

我这么说是因为当我用包含位图值的字符串替换一个小的随机字符串时,一切都有效。

我也尝试过使用parcellable。但我收到错误,parcellable 不能有默认值,所以我们必须作为字符串传递。我该如何解决这个问题?

android android-jetpack-navigation android-jetpack-compose

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

权限拒绝:MediaDocumentsProvider

尝试显示 URI 时出现以下异常。我认为它发生在我的活动停止并且我再次尝试访问可行的 URI 之后。还有其他问题可以解决这个问题,但我很困惑如何将任何解决方案应用于我的代码,因为我的 takePhotoIntent 允许拍摄或从图库中选择图片(见下文)。

Unable to open content: content://com.android.providers.media.documents/document/image%3A49688
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri 
content://com.android.providers.media.documents/document/image%3A49688 from pid=821, uid=10238 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)

我的 createImageFile 和我的 takePhotoIntent:

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp;
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path …
Run Code Online (Sandbox Code Playgroud)

java android android-permissions

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