web-dev-qa-db-ja.com

一部のAndroidデバイスは内部ストレージをSDカードとして扱い、外部ストレージをEXTSDとして扱います

さまざまなベンダーのAndroidデバイスがたくさんあります。

/ mnt/sdcardを内部ストレージに接続し、/ mnt/extsdを外部ストレージに接続するもの(シナリオ1)と/ mnt/sdcardを外部ストレージに接続するもの(シナリオ2)

Android APIがこのパスへのハンドルを提供するため、2番目のシナリオは標準だと思います。問題は、シナリオ1では、/mnt/extsdreadonlyになることです。 WRITE_EXTERNAL_STORAGE許可!

これは、実際の外部SDカードからのみデータを読み取ることができ、書き込むことができないことを意味します。

Extsdフォルダーに書き込めるように、これに対する回避策はありますか?

11
Vrashabh Irde

デバイスで書き込みアクセスを取得するためにこれまでに見つけた唯一の回避策は、デバイスをルート化することです:(

サムスンはマニフェストエントリで回避策を提供します

詳細については、次のリンクをご覧ください。

http://www.xda-developers.com/Android/android-3-2-code-inadvertently-preventing-write-access-to-external-storage/

そして

http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/

抜粋:

GoogleのAOSPコードには、Android 3.2の前後で導入されたバグがあり、OSがUSBストレージを処理する方法に影響を与え、SDカードやUSBスティックへの書き込みアクセスを妨げる可能性があるようです。XDAエリート有名な開発者、シニアモデレーター、ニュースライターのChainfireは、彼のブログ投稿でこの問題を要約しています。

「以前は、アプリが「WRITE_EXTERNAL_STORAGE」権限を要求し、すべての外部ストレージ(ユーザー/グループ「sdcard_rw」)への書き込みアクセスを許可していました。これは、プライマリ外部ストレージへの書き込みアクセスのみを許可するように変更されたようです。 「WRITE_MEDIA_STORAGE」と呼ばれる2番目の権限が導入されました。これにより、他の外部ストレージ(ユーザー/グループ「media_rw」)へのアクセスが許可されます。

問題は、サードパーティには実際にはこの権限が付与されず、システムアプリとデバイスメーカーが提供するアプリのみに通常この権限が付与されることです。例外があります。一部のデバイスでは、サードパーティのアプリにこの権限が付与されるようですが、AOSPの情報筋によると、そうすることは想定されていません。」

0
Vrashabh Irde
_Environment.getExternalStorageState() returns path to internal SD mount point like "/mnt/sdcard"
_

Environment.getExternalStorageDirectory()は、デバイスの製造元が「外部ストレージ」と見なしたものを指します。一部のデバイスでは、これはSDカードなどのリムーバブルメディアです。一部のデバイスでは、これはオンデバイスフラッシュの一部です。ここで、「外部ストレージ」とは、少なくともAndroid 2.x以降の場合、ホストマシンにマウントされたときにUSBマスストレージモードを介してアクセスできるもの」を意味します。

_But the question is about external SD. How to get a path like "/mnt/sdcard/external_sd" (it may differ from device to device)?
_

Androidには、前述のように、外部ストレージを除いて、「外部SD」の概念はありません。

デバイスの製造元が外部ストレージをオンボードフラッシュにすることを選択し、SDカードも持っている場合は、その製造元に連絡して、SDカードを使用できるかどうか(保証されていません)とルールを確認する必要があります。使用するパスなど、それを使用します。

4
Royston Pinto

ルート権限を取得されたデバイスでは、/ system/etc/permissions/platform.xmlを変更して、アクセス許可の問題を「修正」できます。以下は私のために働いた:

  • adb pull /system/etc/permissions/platform.xml
  • 次のように、media_rwがWRITE_EXTERNAL_STORAGE権限に含まれるようにplatform.xmlを変更します。

    <permission name="Android.permission.WRITE_EXTERNAL_STORAGE" >
       <group gid="sdcard_rw" />
       <group gid="media_rw" />
    </permission>
    
  • adb Push platform.xml/system/etc/permissions/platform.xml

  • デバイスを再起動します
4
Peter