我只想问你一些我无法找到解决方案的事。
我有一个三星galaxy s4 mini,我正在尝试用相机做一些事情,有时会崩溃,但它不会给我任何错误。
我收到了这段代码:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException e) {
e.printStackTrace();
}
// Continue only if the File was successfully created
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
String directory = "appname" + File.separator + "images";
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;
File storageDir = new File(path);
storageDir.mkdirs();
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK && mCurrentPhotoPath != null) {
File file = new File(mCurrentPhotoPath);
BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath(),
btmapOptions);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bm,(int)(bm.getWidth()*0.6), (int)(bm.getHeight()*0.6), true);
mUri = Uri.fromFile(file);
sendPhoto(Constants.encodeTobase64(resizedBitmap));
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "Error", Toast.LENGTH_SHORT).show();
}
});
}
}
有时,当应用程序位于方法createImageFile()中时,var mCurrentPhotoPath始终具有值,但是当应用程序位于onActivityResult()方法中时,有时此值为NULL,并且当此失败时。应用程序刚关闭,我没有任何类型的错误。这有点奇怪,因为有时候它会起作用(我确实喜欢连续15次而16次失败......)。
最奇怪的是,当我在另一部手机中试用这个应用程序时,它的工作原理是......有什么解决方案吗?
谢谢大家,对此感到非常恼火。
答案 0 :(得分:4)
我认为你当前正在调用相机意图的活动。由于缺乏资源而被android OS杀死。这就是从相机应用程序返回时的原因。您当前的活动已重新启动。如果你想检查请登录oncreate方法。要解决此问题,您必须在onSaveInstanceState方法中存储mCurrentPhotoPath存储,并在onCreate方法上将其重新获取以获取更多信息,请参阅Google devloper site。
答案 1 :(得分:0)
三星和棒棒糖有一个错误。它正在吹走活动,而不是从相机返回它。
这可以解决您的问题:
File file = new File(createImageFile());
还要记得在打开相机之前调用createImageFile(),这样你就可以拥有保存图片的文件路径了。