PCスペック
Windows10 HOME 64bit
メモリ 32GB
プロセッサ Intel Core i7-8700CPU 3.20GHz
Android Studio 3.4.1(最新ver)
デモ用端末(XPERIA OS:7.0 API 24)
画像をスマホのストレージに保管しておいて、必要な時にあとから読み出したいのですが、うまくいくものとうまくいかないものがあります。同じコードを書いているのに結果が違う理由としてどんな原因が考えられるのでしょうか?
↓はうまくいきます(画像がCamera内に保存され、ファイルからURIの取得も問題なく可能)
java
1 // 保存先のフォルダーをカメラに指定した場合 2 File cameraFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),"Camera"); 3 4 5 // 保存ファイル名 6 fileName1 = new SimpleDateFormat("ddHHmmss", Locale.US).format(new Date());//データのフォーマット決め 7 filePath1 = String.format("%s/%s.png", cameraFolder.getPath(),fileName1);//画像ファイルの場所までの文字列(ファイルパス) 8 Log.d("debug","filePath1:" + filePath1); 9 10 // capture画像のファイルパス 11 File cameraFile = new File(filePath1); 12 13 registerDatabase(filePath1);//データベースへ登録 14 15 //ファイルからURIを取得 16 cameraUri = FileProvider.getUriForFile(MainActivity.this, getApplicationContext().getPackageName() + ".fileprovider", cameraFile);
しかし、↓のコードではCameraディレクトリ内にファイルが作成されておらず、そのせいでデータベースに画像も保存できていません。
java
1 2 // 保存先のフォルダーをカメラに指定した場合 3 File resultFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),"Camera"); 4 // 保存ファイル名 5 fileName2 = new SimpleDateFormat("yyyyMMdd_HH", Locale.US).format(new Date());//データのフォーマット決め 6 filePath2 = String.format("%s/%s.png", resultFolder.getPath(),fileName2);//画像ファイルの場所までの文字列(ファイルパス) 7 Log.d("debug","filePath2:" + filePath2); 8 9 registerDatabase(filePath2);//データベースへ登録 10 11 // capture画像のファイルパス 12 File resultFile = new File(filePath2); 13 //ファイルからURIを取得 14 resultUri = FileProvider.getUriForFile(MainActivity.this, getApplicationContext().getPackageName() + ".fileprovider", resultFile); 15 uploadImage(resultUri);
・追記
以下がデータベースへ登録するためのregisterDatabaseメソッドです。
java
1// アンドロイドのデータベースへ登録する 2 private void registerDatabase(String file) { 3 ContentValues contentValues = new ContentValues();//contentValuesインスタンスを作成 4 ContentResolver contentResolver = MainActivity.this.getContentResolver();// 5 contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");//ontecntValuesにキーと値を追加 6 contentValues.put("_data", file);//contentValuesにキーと値を追加//contentValuesにキーと値を追加 7 contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);//contentResolverに挿入 8 }

回答1件
あなたの回答
tips
プレビュー