インターネット上にある MP3ファイルをダウンロードして、外部メディアに保存するというシンプルなアプリを作成してます。ダウンロード部分はすんなり実装できたが、外部メディア上のディレクトリ作成でハマる 😅

dir.mkdirs() の戻りが常に failしている。manifestsの設定もしているのになぜ?

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  File dir = new File(Environment.getExternalStorageDirectory(),"/Podcasts/temp");
  if(!dir.exists()) {
    dir.mkdirs();
  }

結論から言うと、manifestsで宣言をしただけでは書き込みは出来ない。よって、ディレクトリを作成する前に、ユーザの許可を得る必要がある(普通に考えれば当たり前の事に気づかない…)

  int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
  if (ActivityCompat.checkSelfPermission(this,
    Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
      ActivityCompat.requestPermissions(this,
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
        PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
  }

似たような事でハマらないように、ご参考まで