私のプロジェクトでは一度も写真を撮ったことがありませんでしたので、おそらく愚かな質問をすることをお詫びします。基本的には、次のコードを使用して画像を撮ってから一時ファイルに保存しています。私は何のエラーもなかったが、何も起こっていない。コードの最後の部分で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 ocurred ")'を 'Log.e(TAG、" Searchable、catch ocurred "、ex)'に置き換えます。この方法では、例外のJavaスタックトレースを取得し、何が間違っているかを知ることができます。 – CommonsWare
@MilanNzエラー:E/MainActivity:java.io.IOException:オープンに失敗しました:EACCES(アクセスが拒否されました) – Jake