Android 4.4以降のSDカード書き込みについて

タグ: | 投稿日: 投稿者:

こんにちは、kikuです。

GoogleはAndroidの4.4からSDカードへの書き込みの仕様が変わって、大勢の開発者達を泣かせていますね。ひどい男です。

現状どのような状況になったのかまとめてみました。

まず今回の対象端末はプライマリストレージ本体のものでセカンダリストレージSDカードの端末、つまり大容量の内部ストレージを所持しつつSDカードにも対応している端末です。

しかし、全くSDカードに書き込めないというわけではありません。
全く書き込めなければSDカード対応という存在意義がなくなってしまいますよね。
下記パスにならアプリ側から書き込みが可能なようです。
[SDカードのroot]/Android/data/[パッケージ名]/[ここから書き込みできます]

しかし!アプリ側から上記階層の[パッケージ名]のフォルダを作成する事はできませんでした。
これは恐らく [SDカードのroot]/Android/data/ のディレクトリに書き込み権限がないからでしょう。
少なくとも私が色々試したところできませんでした。(何かできる方法があれば教えてください)

つまりこういうこと
[SDカードのroot]/Android/data/[ここへは書き込めません]
[SDカードのroot]/Android/data/[パッケージ名]/[ここに書き込めます]

開発者を泣かせすぎです。許しがたいです。よっぽどSDカードは使わせたくないんですね。

ちなみにアプリをアンインストールすると[パッケージ名]フォルダごと消されます。そこらへんも怖い仕様です。

端末にプリインストールされているファイルマネージャアプリは[パッケージ名]フォルダを作成することが出来るようですので、ユーザ側からすると色々と弄くれるみたいですね。

詳しくは、Android.comの「外部ストレージ技術情報」をご覧下さい。

2015/12/8 追記
APIレベル19以降(4.4)であれば、Context.getExternalFilesDirs()という便利なものが使えました!
これをアプリ内で呼べば下記フォルダを作成した上にパスの取得も可能です。
[SDカードのroot]/Android/data/[パッケージ名]

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>