java - 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");
}
}
});
}
};
解决方案
是的,您是对的,您在清单中添加了权限,但如果您的设备是 Android 6+,那么您应该检查运行时权限。在您的代码中,我找不到这部分。Android Developers 官方网站解释了如何在运行时请求运行时权限。希望能帮助到你。
您应该请求使用相机以及保存照片的权限(读/写到外部存储)
推荐阅读
- docker - 在 Ubuntu VM 上重新启动后,docker 服务死机
- gnuplot - 图例框尺寸
- javascript - 在 Chrome JavaScript 调试器中单步执行代码会引发不同行的异常?
- html - 用切片拆分二维数组打字稿html
- android - 为什么我的通知没有在我的 BroadcastReceiver 类中创建?
- java - IntelliJ IDEA - CodenameOne - AndroidStudio 安装/JDK 更改后找不到 CEF 路径?
- php - 证书生成器问题[字体加载问题]
- c++ - C++ 在记忆化期间通过引用传递 std::map 并将其保存在堆栈中的最佳选择是什么
- python - 为什么在 Visual Studio 中运行代码时出现异步错误
- node.js - 无法通过在 EC2 实例上运行的 Node.js 应用程序使用 AWS SES 发送电子邮件