2012-02-13 13 views
1

アンドロイド4.0が搭載されたSamsung Nexus Sデバイスがあります。私はsdcard上の既存のフォルダにファイルを作成しようとしていて、 "permission denied"を取得しようとしています。次のコードでは、exists()はtrueを返しますが、canWrite()はfalseを返します。どうして?ところでSamsung Nexus S android 4.0:sdcardのdirにファイルを作成できません

File exst = Environment.getExternalStorageDirectory(); 
    String exstPath = exst.getPath(); 


       File d = new File(exstPath+"/TestDir/"); 
       if (!d.exists()) 
       { 
        int b = 1; 
       } 
       if (!d.canWrite()) 
       { 
        int a = 1; 
       } 

、私はマニフェストに<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />を追加しましたが、それは助けにはなりませんでした。

答えて

0

携帯電話はコンピュータに接続されていますか?そうであれば、コンピュータはSDカードを制御し、書き込みを許可しません。この場合、接続モードを「Charge Only」に変更してみてください。あなたの最初の行に

+0

私はそれが2.3であったより4.0で少し違うと思う。接続すると、4つのオプション「PCモード」、「USBストレージ」、「充電のみ」などは表示されません.USBストレージをオンまたはオフに切り替えるかどうかを尋ねます。私はsdcardにいくつかのファイルをコピーして、私はUSBストレージを持っていなければならなかった。私のPCから私のアプリを起動してデバッグできるようにするため、私はそれをオフにしました。 –

0

追加getAbsolutePath()は、それが動作するはずです:

File exst = Environment.getExternalStorageDirectory().getAbsolutePath(); 

更新:

は自分のコードや他のSOの回答を見直し、私はあなたがいるかどうかを確認するためにcanWriteを使用していないと信じてパスはSDカードに書き込むことができます。代わりに、あなたはEnvironment.MEDIA_MOUNTEDを使用します。

String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
    Log.d("Test", "sdcard mounted and writable"); 
} 
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
    Log.d("Test", "sdcard mounted readonly"); 
} 
else { 
    Log.d("Test", "sdcard state: " + state); 
} 
+0

試しましたが、同じ結果 –

+0

答えが更新されました。また、WRITE_EXTERNAL_STORAGE権限がマニフェストファイルの正しいセクションに配置されていることを確認してください。 –

0

すべての答えは部分的に提案を与えるものの、問題はAPI

String myPath = Environment.getExternalStorageDirectory().getAbsolutePath ; 
    // or .getName() or .getPath() <-- these don't return everything you need. 
    // same is true for the file version you're trying. 

    // you have to append 

「/ external_sd /」

の三星電子非標準実装の可能性が非常に高いです

をファイル名の前のパスに追加します。ここで

はAPI

http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=162934&messageNumber=1381&startId=zzzzz~&searchType=TITLE&searchText=sdcard

の彼らの「破壊」のための三星電子の説明は、それはまた、いくつかのSOの記事で述べていますが、私は便利なリンクを持っていない...

  • ですH

[編集:2013年5月5日]この問題の病理は次のとおりです。さまざまな通常の方法でパス()を取得できます言及した。次に、シンプルなファイルを書き、それをDDMSファイルエクスプローラに表示します。正確なパスとファイル名をハードコーディングしてみるか、/ external_sd/thingを使用してください。どちらの場合も、自分のファイルを読み込むことはできません! (あるいは、それはゴミを含んでいるかもしれません).3つの異なるS3の携帯電話でこれを確認しました。 RemoteTestingLabサイトを介してサムスンの「本物の」電話機をさらにテストし、報告する。

関連する問題