1
我从来没有尝试过在我的一个项目中拍照,所以我很抱歉可能会问一个愚蠢的问题。基本上,我使用下面的代码尝试拍摄一张照片,然后将其保存在临时文件中。我没有收到任何错误,但没有发生任何事情。我发现在代码的最后部分抛出IOException。如果你知道这可能是什么,我会非常感谢你的帮助。谢谢! 使用权限: 在我的应用程序中使用安卓相机的困惑
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
代码:
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
static final int REQUEST_IMAGE_CAPTURE = 1;
private static final String TAG = "MainActivity";
String mCurrentPhotoPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button takePicButton = (Button)findViewById(R.id.takePicButton);
takePicButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dispatchTakePictureIntent();
}
});
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
static final int REQUEST_TAKE_PHOTO = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
Log.i(TAG, "Searchable, Catch error ocurred");
}
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
}
后异常消息... – MilanNz
不登录异常本身不要捕捉异常。将Log.i(TAG,“Searchable,Catch error ocurred”)替换为Log.e(TAG,“Searchable,Catch error ocurred”,ex)'。这样,您将获得异常的Java堆栈跟踪并可以了解错误。 – CommonsWare
@MilanNz错误是:E/MainActivity:java.io.IOException:打开失败:EACCES(权限被拒绝) – Jake