質問: androidのアプリで作成したファイル(主に.csv)を、任意のフォルダに保存することは可能でしょうか。 getFilesDir()では/data/user/0/<パッケージ名>/files、 getExternalStorageDirectory()では/storage/emulated/0、 getExternalStoragePublicDirectory(directory)では/storage/emulated/0/directoryにそれぞれ保存されるらしく、どれもデバイスからもPCからも見れないフォルダになっています。 これを特別な操作(adbコマンド)などを使用せずに、保存先を触れる場所に指定することは可能でしょうか。 ちなみにeclipseでAndroid6.0を使っています。 パーミッションはmanifest.xmlにきちんと明記してあります。 作成したファイルをすぐにPCに移して作業することを目指しています。 プログラミング初心者なので、説明が足りないかもしれませんがよろしくお願いします。
回答: まず前提として、Androidでは任意のディレクトリに保存できません。 ご提示のとおりにgetExternalStoragePublicDirectory()等のアプリの権限で許可されたディレクトリにしか保存出来ません。 本題に戻しまして getExternalStoragePublicDirectory()で取得されたディレクトリは、マスストレージとしてアクセス出来るディレクトリのはずです。 例えばgetExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)に保存した場合を例にします。 1. AndroidデバイスとPCをUSBでつなぐ 2. Notificationに「この端末をUSB充電」という通知が出ているはずなのでコレをタップ 3. 選択肢がいくつか出ているはずなので「ファイルを転送する」をタップ 4. PC側のエクスプローラー等でデバイスのストレージが見えているはずなので内部共有ストレージへアクセス 5. Downloadディレクトリに目的のファイルが保存されているはず (2.3.の手順は昔のAndroid Versionでは不要でいきなりつながるはずです。どのVersionからだったかはすぐに出てきませんが6.0であれば必要手順のはずです。) 上記手順を行なっても保存されたファイルが見えない場合はMediaScanが更新されていないものと思います。 ファイルは保存されているがファイルシステムが更新されていないので見えない、と言った状態です。 更新するには以下のいずれかで ・Androidをデバイス再起動 ・保存後以下のコードを組み込みメディアスキャンを要求する ``` Uri uri =Uri.parse("file://" + RESULT_DIR+"/"+RESULT_FILE);//RESULT_DIR/FILEは保存対象のパス //mediascan sendBroadcast(new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); ```