我正在编写一个使用相机的应用。我遇到了一个奇怪的问题。 " createImageFile()"使用API 16在我的虚拟设备上成功创建文件。但是,当我在Sony Xperia Z3(Android 6.0.1,API 23)上运行应用程序时,不会创建该文件。我甚至都没有收到错误。我只需点击运行cameraChoosen()的按钮,没有任何反应。
经过一些重新调整后,我在createImageFile()中创建了3个Toasts。
所有Toast正在使用虚拟设备API 16。
只有Toast1适用于我的Xperia Z3
public void cameraChoosen(){
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 ex) {
// Error occurred while creating the File
//...
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this, "com.example.karol.carendal", photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
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 + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
Toast.makeText(getBaseContext(), "Toast1", Toast.LENGTH_SHORT).show();
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
Toast.makeText(getBaseContext(), "Toast2", Toast.LENGTH_SHORT).show();
if (image.exists()){
Toast.makeText(getBaseContext(), "File created successfully", Toast.LENGTH_SHORT).show();
}
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
任何想法导致问题的原因是什么?
问候:)
答案 0 :(得分:0)
对于Android 6及更高版本,您不仅应该在清单中请求写入外部存储权限。
您还需要在运行时要求用户确认此权限一次。
Google获得运行时权限。
或者,您应用的用户可以转到您应用的Android设置并切换存储权限开关。