微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在另一个片段中读取用户选择的图像,并跨应用重启

如何解决在另一个片段中读取用户选择的图像,并跨应用重启

我的应用使用导航组件,因此有一个包含多个片段的活动。

  1. 在 AccountsFragment 中,我允许用户使用 fab 创建一个新帐户,然后显示一个对话框。在对话框中,用户可以单击本应打开系统选择器的头像图标。下面是 onClick 的代码(用于头像图片选择):

    if (ContextCompat.checkSelfPermission( requireContext(),Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { //从这里你可以读取他们的数据。

             Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
             intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
             intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
             intent.addCategory(Intent.CATEGORY_OPENABLE);
             intent.setType("image/*");
    
             startActivityForResult.launch(intent);}
    

上面的代码然后打开一个选择器,我选择一个图像(如果没有被授予,我也处理了请求许可)

在活动结果中,我的代码如下:

 if (result.getResultCode() == Activity.RESULT_OK) {
        Intent data = result.getData();
        Uri contentUri = data.getData();
        System.out.println("the returned uri is " + contentUri);

        final int takeFlags = intent.getFlags()
                & (Intent.FLAG_GRANT_READ_URI_PERMISSION
                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);



        requireActivity().getContentResolver().takePersistableuriPermission(contentUri,takeFlags);

        subscriberImageUri = uri.toString(); // this is a string i store in my sqlite db. 

        Picasso.get().load(contentUri).into(subscribersImage);


    }

问题:

  1. 图像只出现在对话框中,而不出现在片段用作布局的帐户列表 recyclerview 中。这是我在用户点击创建帐户按钮后设置图像的方式:

    newSubscriber.setSubscriberImageURi(subscriberImageUri); subscribersArrayList.add(newSubscriber); subscribersAdapter.notifyDataSetChanged();

Piccasso 不会加载图像(代码在回收器适配器中)并且不会引发错误

  1. 在持久化 URI 并将其中的一个字符串保存到 sqlite 之后,如何让该字符串仍然指向所选的同一图像?这是我在帐户详细信息片段中的代码(它应该显示在帐户列表片段中选择的个人资料图片

    列出 uriPermissions = requireActivity().getContentResolver().getPersistedUriPermissions(); for(UriPermission uriPermission: uriPermissions){

         Uri data = uriPermission.getUri();
         profile.setimageURI(data);
         Picasso.get().load(data).into(profile); // this is just to test for the first user created.
     }
    

我的清单权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

请帮忙,我已经被这个问题困扰了好几天了。我可以提供进一步的说明。

解决方法

上面的代码非常适合持久化 uri 权限。问题是我在图像视图上使用了色调,而所选图像被色调挡住了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。