我有一个使用Camera API的应用程序,它会通过调用拍摄照片
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
mCamera.takePicture(shutterCallback, rawCallback, mPicture);
mCamera.startPreview();
mPicture定义为
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (pictureFile == null){
Log.d(TAG, "Error creating media file, check storage permissions: " /* +
e.getMessage()*/);
Toast.makeText(MainActivity.this, "Failed to write Photo to File", Toast.LENGTH_SHORT);
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
Toast.makeText(MainActivity.this, "Writing Photo to File", Toast.LENGTH_SHORT);
fos.write(data);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
};
public static File getOutputMediaFile(int type){
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/camtest");
dir.mkdirs();
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
mediaFile = new File(dir, "IMG_"+ timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
为什么没有保存任何图片?我去了我的画廊&amp;文件管理器应用程序检查,没有。 我也注意到当我退出应用程序时我的应用程序崩溃了,这可能是为什么?
我的onPause方法如下
@Override
protected void onPause() {
mSensorManager.unregisterListener(mShakeDetector);
letGo();
super.onPause();
}
private void letGo(){
if(mCamera != null){
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
cameraPreview.getHolder().removeCallback(cameraPreview);
mCamera.release();
mCamera = null;
}
}
答案 0 :(得分:0)
为什么没有保存任何图片?
他们完全有可能得救。但是,请记住,您正在主应用程序线程上执行磁盘I / O;根据{{1}}设置,您可能会因此I / O而崩溃。
如果没有保存图片,您应该在LogCat中看到您的日志消息。不过,我建议将它们切换到错误严重性(StrictMode
)。
我去了我的画廊&amp;文件管理器应用程序检查,没有。
它们不会出现在设备“图库”式应用程序中,也不会出现在桌面操作系统的文件管理器中很长一段时间。这是因为这些工具使用Log.e()
来查看存在的内容,而您还没有安排将文件编入MediaStore
的索引。为此,请使用MediaStore
及其MediaScannerConnection
方法。
我还注意到退出应用时我的应用崩溃了
Use LogCat to examine the Java stack trace associated with your crash