タイトルの通りですが、下記のように4つのディレクトリで試してみたところ、
Imgcodecs.imwrite()は全てfalseを返してしまいます。パーミッション周りの設定が何か間違っているのでしょうか?
▼環境
Android 7.1.1 Qua Phone qx(実機)
Android Studio 2.3.3
Min Sdk 21
Target Sdk 26
▼保存処理
java
1 private void saveImage(Mat mat) { 2 Size size = mat.size(); 3 Log.d("size", size.toString()); 4 String nowString = CommonUtils.getNowString("yyyyMMddHHmmss"); // 20180103053231が返ります。 5 String fileName = nowString + ".jpg"; 6 7 boolean success; 8 9 String path1 = getActivity().getFilesDir() + "/" + fileName; 10 Log.d("path1", path1); 11 success = Imgcodecs.imwrite(fileName, mat); 12 Log.d("success", String.valueOf(success)); 13 14 String path2 = getActivity().getCacheDir() + "/" + fileName; 15 Log.d("path2", path2); 16 success = Imgcodecs.imwrite(fileName, mat); 17 Log.d("success", String.valueOf(success)); 18 19 String path3 = getActivity().getExternalFilesDir(null) + "/" + fileName; 20 Log.d("path3", path3); 21 success = Imgcodecs.imwrite(fileName, mat); 22 Log.d("success", String.valueOf(success)); 23 24 String path4 = getActivity().getExternalCacheDir() + "/" + fileName; 25 Log.d("path4", path4); 26 success = Imgcodecs.imwrite(fileName, mat); 27 Log.d("success", String.valueOf(success)); 28 29 getActivity().finish(); 30 }
▼logcat
text
1D/size: 640x480 2D/path1: /data/user/0/パッケージ名/files/20180103053231.jpg 3D/success: false 4D/path2: /data/user/0/パッケージ名/cache/20180103053231.jpg 5D/success: false 6D/path3: /storage/emulated/0/Android/data/パッケージ名/files/20180103053231.jpg 7D/success: false 8D/path4: /storage/emulated/0/Android/data/パッケージ名/cache/20180103053231.jpg 9D/success: false
▼Manifest.xmlのパーミッション
xml
1 <uses-permission android:name="android.permission.CAMERA"/> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 3 <uses-feature android:name="android.hardware.camera2" android:required="false"/> 4 <uses-feature android:name="android.hardware.camera2.autofocus" android:required="false"/>
▼パーミッションのリクエスト
java
1 String[] PERMISSIONS = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; 2 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 3 if(!hasAllPermissions(this, PERMISSIONS)){ 4 ActivityCompat.requestPermissions(this, PERMISSIONS, 1); 5 } 6 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。