English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android4.4 外部ストレージへのアクセスの詳細と例

Android4.4  外部ストレージへのアクセス

Android 4.4システムでは、外部ストレージカード(SDカード)はセカンダリーストレージデバイス(secondary storage)と呼ばれており、アプリケーションは外部ストレージカード(SDカード)にデータを書き込むことができません。WRITE_EXTERNAL_STORAGEはデバイス上の主要な外部ストレージ(プライマリーストレージ)にのみ書き込み権限が付与され、他の外部ストレージに対しては、ファイル属性はフォルダー構造に基づいて変更され、アプリケーションはWRITE_EXTERNAL_STORAGE権限を取得する必要はありませんが、自分のパッケージ名に関連するフォルダーを管理することができます。例えば、アプリケーションのパッケージ名がcom.example.externalstorageの場合、外部ストレージ上のAndroid/data/com.example.externalstorage/フォルダーはそのもののものです、アクセスは自由で、権限は必要ありません。また、特に注意が必要なのは、アプリケーションをアンインストールする際には、SDカード上に作成された対応するフォルダー、データも同時に完全に削除されます。

例外として、Android 4.4システムアプリ(プラットフォーム署名を持つもの、または事前にインストールされているものを指します)/system/プライベート-appディレクトリのアプリ(アプリケーション)はWRITE_MEDIA_STORAGE権限を使用して完全に読み書きするためのSDカードの権限を取得できます。

Android 4.4以下の関数を使用して外部ストレージにアクセスするように追加されました:

 Context.getExternalFilesDirs(null)、複数のsdカードのアプリのプライベートデータエリアのfilesディレクトリを返します

/storage/sdcard0/Android/data/<パッケージ名>/files

/storage/sdcard1/Android/data/<パッケージ名>/files

Context.getExternalCacheDirs()、複数のsdカードのアプリのプライベートデータベースのキャッシュディレクトリを返します

/storage/sdcard0/Android/data/<パッケージ名>/caches

/storage/sdcard1/Android/data/<パッケージ名>/caches

Context.getObbDirs()、複数のsdカードのobbディレクトリの下のプライベートデータを返します(このディレクトリは通常ゲームのデータパックディレクトリです)

/storage/sdcard0/Android/obb/<パッケージ名>

/storage/sdcard1/Android/obb/<パッケージ名>

の上で以下の関数を使用して、私のAndroid 5.1のシステム上ではsdカードのパスを正しく取得できますが、Android4.4システム上では内部ストレージのパスしか見ることができません。

 
   
 

オンラインの情報によると、Android 4.4以降、システムファイルを編集してsdカードを管理することができます。以下の方法で実行します:

1<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
2     <group gid="sdcard_r" />
3     <group gid="sdcard_rw" />
4     <group gid="media_rw" />
5   </permission>

編集/system/etc/permissions/platform.xmlファイルのandroid.permission.WRITE_EXTERNAL_STORAGEノードに<group gid="media_rw"を追加 /(root権限が必要です)。

編集が完了したら、sdカードを自由に操作できます。

ご読覧ありがとうございます。皆様のご支援に感謝します!

おすすめ