File.canWrite() は、パーミッションが提供されているにもかかわらず、一部のデバイスで false を返します。
私のアプリケーションでは、外部 Sd カードにデータを書き込む必要があります。ただし、これは一部のデバイスでは機能しますが、他のデバイスでは失敗します。たとえば 動作: Limebox 内部フラッシュ、SDCard、Android OS: 2.3.3 Samsung Sdcard、extSdcard、Android OS: 4.0.3
失敗: Leoxys sdcard、extsd android OS:4.0.3
外部 SD カードへの書き込み操作を許可する Android 互換デバイスを動的に見つける方法。myfile.canWrite
詳細: getExternalSD() は、外部 SD カード パスを返すユーザー定義関数です。
私の場合、外部SDカードのパスは「/mnt/extSdcard」(または)「/mnt/extsd」です。ファイル「/system/etc/vold.fstab」を読み取って、外部SDカードのパスを見つけています。
ここにいくつかのコード スニペットがあります: 外部 SD カードにフォルダーを作成します。一部のデバイスでは、myfile.canWrite() が False を返し、フォルダーを作成できません。
String sdcardpath = getExternalSD();
System.out.println("the sdcard path is:"+sdcardpath.trim().toString());
tv = (TextView) findViewById(R.id.textView1);
tv.append("the sd card path is:"+sdcardpath);
File myfile = new File(sdcardpath);
tv.append("\n the extsd is readable or not:"+myfile.canRead());
tv.append("\n \n the extsd is writable or not:"+myfile.canWrite());
if(myfile.canWrite()){
File testfile = new File(sdcardpath, "test");
if(testfile.exists()){
}else{
boolean mkdir = testtlie.mkdirs();
if(mkdir == true){
tv.append("\n\n the path is:"+sdcardpath.trim().toString()+"/myfile");
}else{
tv.append("\n File does not have permissions");
}
}
}else{
System.out.println("the external sd card does not have write permissions");
tv.append("\n\n the external sd card does not have write permissions");
}
xml ファイルのスニペット。
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
についての提案をいただきたいと思い
ます。デバイスが本当に Android と互換性があるかどうかを開発者に知らせる API はありますか?
b. 異なるハードウェア デバイスで動作に違いがある理由。これはファームウェアに関連していますか?
c. この種のハードウェアで書き込みを行う別の方法はありますか?
/system/etc/premissions/ の下にあるファイル "platform.xml" のアクセス許可をターミナル エミュレーターを使用して変更しようとしましたが、ファイルを書き込みモードで開くことができません
デフォルトでは、android は Environment.getEnternalStorageDirectory() を提供します。ただし、ライブラリは、一部のデバイスの内部メモリになる「/mnt/sdcard」を返します。
ご意見をお待ちしております!!