【发布时间】:2021-06-03 18:18:23
【问题描述】:
我开始在 Android 中编程,并且正在测试一些功能。现在我正在尝试从图库中获取图像并将其保存到字节数组中。问题是我在下面留下的代码适用于保存在内部存储器中的图像,但不适用于 SD 中的图像,我已经花了 3 个小时搜索它可能是什么,但现在没有任何效果。谢谢你,祝你有美好的一天!
在清单中我有这一行
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
片段有这样的代码:
public class PhotoFragment extends Fragment {
private ImageButton buttonphoto;
private Context mContext;
private byte[] bytes;
public void getPhoto(){
Intent photoPicker = new Intent(Intent.ACTION_GET_CONTENT);
photoPicker.setType("image/*");
startActivityForResult(photoPicker, 2);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == 2){
if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
getPhoto();
}
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_report, container, false);
buttonphoto = v.findViewById(R.id.fragmentreportesCameraButton);
buttonphoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ActivityCompat.checkSelfPermission(getContext(),Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},2);
}else{
getPhoto();
}
}
});
return v;
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri images = data.getData();
if(requestCode == 2 && resultCode == Activity.RESULT_OK && data !=null){
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),images);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Toast.makeText(mContext,"agarro?",Toast.LENGTH_SHORT).show();
bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
bytes = stream.toByteArray();
}catch (Exception e){
e.printStackTrace();
}
}
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mContext = context;
}
}
【问题讨论】:
-
如果您还没有这样做,请在清单中添加 android:requestLegacyExternalStorage="true" ,来源:developer.android.com/training/data-storage/use-cases
-
用户使用 ACTION_GET_CONTENT 选择的每张图片都可以加载到字节数组中。你的代码看起来不错,尽管我会以不同的方式做。您也不需要任何许可。说出究竟出了什么问题。
标签: java android android-studio gallery