【问题标题】:I can't get the photos saved to the SD我无法将照片保存到 SD
【发布时间】: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


【解决方案1】:

Android 级别 10,11 更改了您的隐私政策。在此策略中,我们无法直接获取数据,然后将此标记添加到应用程序标记内的清单文件中:

android:requestLegacyExternalStorage="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多