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

Read User Selected Image in Another Fragment, and Across App Restarts

我的应用使用导航组件,因此有一个 activity 和多个片段。

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

    如果(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);}
    

然后上面的代码打开了一个选择器,我select一张图片(如果没有被授予,我也处理过请求权限)

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

 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(新订阅者); subscribersAdapter.notifyDataSetChanged();

Piccasso 只是不加载图像(代码在回收器适配器中)并且不会抛出错误。

  1. 在持久化 URI 并将其中的一个字符串保存到 sqlite 之后,我怎样才能使该字符串仍然指向 selected 的同一图像?这是我在帐户详细信息片段中的代码(应该显示在帐户列表片段中 selected 的个人资料图像:

    List uriPermissions = requireActivity().getContentResolver().getPersistedUriPermissions(); 对于(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 权限。问题是我在图像视图上使用了色调,而所选图像被色调遮挡了。