如何解决如果照片是使用 android 的相机应用程序拍摄的,为什么我不能在我的 android 应用程序中上传图库中的照片?
我想从图库上传图片并在我的 Android 应用中显示。例如,如果我从屏幕截图文件夹中选择一个图像,这很好用。但是当我从存储手机相机拍摄的照片的文件夹中选择图像时,它不起作用。
public void UploadPicture(View v) {
Intent pickPhoto = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto,1);
protected void onActivityResult(int requestCode,int resultCode,Intent imageReturnedIntent) {
super.onActivityResult(requestCode,resultCode,imageReturnedIntent);
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
imageView.setImageURI(selectedImage);
}
break;
}
}
解决方法
在我看来,这些问题都可以通过Ucrop等ImagePicker库来解决。 Ucrop Library For Android
确保您有运行时权限处理。为了更轻松地处理权限,您可以使用 Dexter Dexter
确保您在清单文件中拥有外部存储读取权限。 如果您想从相机拍摄图像,您可能还需要读/写权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
注意:对于 Pie 以上的 android 版本,请将这些属性粘贴到 manifest.xml 中的应用程序标签中:
<application
android:preserveLegacyExternalStorage="true"
android:requestLegacyExternalStorage="true"
... >
...
...
</application>
,
确保您已授予运行时从库中选择图像的权限以及清单中的权限。
也在清单中使用 android:requestLegacyExternalStorage="true"。
然后打开画廊使用此代码:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction("android.intent.action.PICK");
startActivityForResult(intent,PICK_IMAGE_REQUEST);
在 onActivityResult 中:
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null) {
mImageUri = data.getData();
//Use glide for better result
Glide.with(this).load(mImageUri).into(mImageView);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。