onClick 方法无法捕获未保存到图库的图像和文件
onClick method not working to capture images and files not saving to gallery
我正在尝试使用 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");
}
}
});
}
};
是的,你是对的,你已经在清单中添加了权限,但如果你的设备是 Android 6+,那么你应该检查 运行time 权限。在你的代码中,我找不到这部分。 Official Site of Android Developers 解释了如何在 运行 时间请求 运行 时间权限。希望能帮助到你。
您应该请求使用相机以及保存照片(READ/WRITE 到外部存储器)的权限
我正在尝试使用 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");
}
}
});
}
};
是的,你是对的,你已经在清单中添加了权限,但如果你的设备是 Android 6+,那么你应该检查 运行time 权限。在你的代码中,我找不到这部分。 Official Site of Android Developers 解释了如何在 运行 时间请求 运行 时间权限。希望能帮助到你。
您应该请求使用相机以及保存照片(READ/WRITE 到外部存储器)的权限