私は写真を撮って内部の記憶装置に保存し、後でそれを取り出すことができるアプリを持っています(恐らくそのウリ)。これは私がこれまで持っているものです: このコードは、私のカスタムカメラボタンが押されたときにトリガされます。画像を撮って保存してもらうことができます+
cameraButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Intent takePic = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = herp(MEDIA_TYPE_IMAGE);
if (file != null) {
fileUri = getOutputMediaFileUri(file);
Log.d("AddRecipeActivity", fileUri.toString());
takePic.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(takePic, CAMERA_REQUEST);
}
}
});
次に、私は(主にAndroidの開発者サイトから取られた)コードの後の2つのメソッドを定義しました:
/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(File file){
return Uri.fromFile(file);
}
/** Create a File for saving an image or video */
public File herp(int type){
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
Boolean a = false;
String externalDirectory= getFilesDir().getAbsolutePath();
File folder= new File(externalDirectory + "/NewFolder");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (!folder.exists()){
a = folder.mkdirs();
Log.d("AddRecipeActivity", String.valueOf(a));
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(folder.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else {
return null;
}
if(mediaFile == null){
Log.d("AddRecipeActivity", "Media file is null");
}
return mediaFile;
}
私は(右の意図をトリガする前に)私のウリを印刷するときI次の出力を取得します。
04-04 04:22:40.757 22402-22402/scissorkick.com.project2 D/AddRecipeActivity: file:///data/user/0/scissorkick.com.project2/files/NewFolder/IMG_20160404_042240.jpg
また、ディレクトリが作成されているかどうかを確認すると、ブール値がtrueになります。 カメラインテントのonActivityResultを実行すると、結果コードは0になります。
なぜこの時点で失敗するのですか?私はマニフェストに適切なパーミッションを定義し、実行時に外部ストレージの書き込みパーミッションも要求します。
編集:onActivityResultを追加しました:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == CAMERA_REQUEST){
Log.d("AddRecipe", String.valueOf(resultCode));
if(resultCode == RESULT_OK){
photo = (Bitmap) data.getExtras().get("data");
thumb = ThumbnailUtils.extractThumbnail(photo, 240, 240);
photoView.setImageBitmap(thumb);
//Toast.makeText(getApplicationContext(), "image saved to:\n" + data.getData(), Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(), "Fail", Toast.LENGTH_SHORT).show();
}
}
}
はonActivityResultでいくつかのナンセンスコードありますが、ポイントはのresultCode = 0と私はなぜ知らないということです。最終的な活動で
あなたのonActivityResultコードを表示 – Karthik
が追加されました。私はそれが適切に配線されていると思うが、私は100%ではない – user2805004
あなたはあなたの問題を解決しましたか? – Dario