android - Android从图库中选择图像不起作用
问题描述
我正在尝试从设备的图库中选择图像,对其进行裁剪,然后将其显示在 imageView 中。单击图像选择器中的图像后,应用程序退出并显示 logcat 消息显示 V/FA:不活动,与服务断开连接。我正在后台运行一项服务以从 Firestore 获取数据。
我也尝试过使用像https://github.com/ArthurHub/Android-Image-Cropper这样的裁剪库,但行为是一样的。
我还尝试了以下方法。
FABfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PICK_IMAGE_REQUEST);
}
});
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null){
mImageUri = data.getData();
imageView.setImageURI(result.getUri());
}
}
请帮助解决此问题。
解决方案
使用这些方法从图库中选择图像:
public void showGallery() {
if (hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
loadGallery();
} else {
requestPermissionsSafely(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
}
}
private void loadGallery() {
Intent choose = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(choose, PICK_IMAGE_GALLERY);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
loadGallery();
}
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_GALLERY) {
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
}
}
}
和:
@TargetApi(Build.VERSION_CODES.M)
public void requestPermissionsSafely(String[] permissions, int requestCode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissions, requestCode);
}
}
@TargetApi(Build.VERSION_CODES.M)
public boolean hasPermission(String permission) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
}
推荐阅读
- docker - 自定义服务器中的 gitlab-runner
- javascript - 使用地图功能时的承诺待处理
- php - JSON 编码数组中的值未传递给变量
- amazon-web-services - What does @$(shell ...) mean?
- reactjs - 如果孩子没有附加参考,是否可以将参考附加到通过 this.props.children 收到的孩子?
- c++ - is it valid to copy a float array to an array of uint8_t using memcpy
- laravel - Problem converting date from a bootstrap datepicker to a different format
- vuejs2 - List transitions in vuejs, changing the underlying array
- php - Print raw data to label printer (QRCode) - ESC/P with PHP
- html - RShiny 与谷歌网站的集成