首页 > 解决方案 > onClick 方法无法捕获未保存到图库的图像和文件

问题描述

我正在尝试使用 cameraKit 库捕获图像并使用 onClick 方法将其保存到我的画廊。onClick 方法不起作用,我不知道为什么,文件没有保存到画廊或 DCIM。

我已经为应用程序添加了写入外部存储的权限,但这并没有什么不同。

package com.example.camerakitqr;



public class Scanner extends AppCompatActivity {
private CameraKitView cameraKitView;
private Button  detectButton;
//GraphicOverlay graphicOverlay;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    cameraKitView = findViewById(R.id.camera);
    detectButton = findViewById(R.id.detectButton);
    detectButton.setOnClickListener(detectOnClickListener);

}

@Override
protected void onStart() {
    super.onStart();
    cameraKitView.onStart();

}

@Override
protected void onResume() {
    super.onResume();
    cameraKitView.onResume();
}

@Override
protected void onPause() {
    cameraKitView.onPause();
    super.onPause();
}

@Override
protected void onStop() {
    cameraKitView.onStop();
    super.onStop();
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    cameraKitView.onRequestPermissionsResult(requestCode, permissions, grantResults);
}








private View.OnClickListener detectOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
         cameraKitView.captureImage(new CameraKitView.ImageCallback() {
             @Override
             public void onImage(CameraKitView cameraKitView, byte[] photo ) {

                  File savedPhoto = new File(Environment.getExternalStorageDirectory(), "photo.jpg");
                  try{
                      FileOutputStream outputStream = new FileOutputStream(savedPhoto.getPath());
                      outputStream.write(photo);
                      outputStream.close();
                      Toast.makeText(getApplicationContext(), "File saved", Toast.LENGTH_SHORT).show();
                  } catch (java.io.IOException e){
                      e.printStackTrace();
                      Log.e("DEMO", "Not saved");
                  }


            }
         });


    }


};

标签: javaandroidandroid-camera

解决方案


是的,您是对的,您在清单中添加了权限,但如果您的设备是 Android 6+,那么您应该检查运行时权限。在您的代码中,我找不到这部分。Android Developers 官方网站解释了如何在运行时请求运行时权限。希望能帮助到你。

您应该请求使用相机以及保存照片的权限(读/写到外部存储)


推荐阅读