在另一个片段中读取用户选择的图像,并跨应用重启
Read User Selected Image in Another Fragment, and Across App Restarts
我的应用使用导航组件,因此有一个 activity 和多个片段。
在 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);
}
问题:
该图片仅出现在对话中,未出现在片段用作布局的帐户列表 recyclerview 中。这是我在用户单击创建帐户按钮后设置图像的方式:
newSubscriber.setSubscriberImageURi(subscriberImageUri);
subscribersArrayList.add(新订阅者);
subscribersAdapter.notifyDataSetChanged();
Piccasso 只是不加载图像(代码在回收器适配器中)并且不会抛出错误。
在持久化 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 权限。问题是我在图像视图上使用了色调,而所选图像被色调遮挡了。
我的应用使用导航组件,因此有一个 activity 和多个片段。
在 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);
}
问题:
该图片仅出现在对话中,未出现在片段用作布局的帐户列表 recyclerview 中。这是我在用户单击创建帐户按钮后设置图像的方式:
newSubscriber.setSubscriberImageURi(subscriberImageUri); subscribersArrayList.add(新订阅者); subscribersAdapter.notifyDataSetChanged();
Piccasso 只是不加载图像(代码在回收器适配器中)并且不会抛出错误。
在持久化 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 权限。问题是我在图像视图上使用了色调,而所选图像被色调遮挡了。