以下のコードでSDCardにファイルを書き込もうとしています(アクセス許可_Android.permission.WRITE_EXTERNAL_STORAGE
_は既にmanifest.xmlに設定されています)。 nmea_file.createNewFile();
を実行すると、_Permission Denied
_で例外がスローされます。
なぜこれが起こっているのでしょうか?
_if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
Log.d(TAG, "Sdcard was not mounted !!" );
}
else
{
File nmea_file;
File root = Environment.getExternalStorageDirectory();
FileWriter nmea_writer = null;
try {
nmea_file = new File(root,"NMEA.txt");
if(!nmea_file.exists()) {
Log.w(TAG, "File Doesn't Exists!");
nmea_file.createNewFile();
}
nmea_writer = new FileWriter(nmea_file);
nmea_writer.append(nmea);
nmea_writer.flush();
}
catch (IOException e)
{
Log.w(TAG, "Unable to write", e);
}
finally
{
if (nmea_writer != null)
{
try
{
nmea_writer.close();
}
catch (IOException e)
{
Log.w(TAG, "Exception closing file", e);
}
}
}
}
_
Manifest.xmlに追加
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
SDカードが次のような操作でブロックされている場合に発生することがあります。
SDCARDにアクセスできることを確認する必要がある場合があります。コードでそれを行う方法は次のとおりです。
if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show();
}
Uses-sdkステートメントは、SDカードへの書き込み(!)機能に影響を与える可能性があることに注意してください。
私のAndroidManifest.xmlには次のものが含まれていました。
<uses-sdk minSdkVersion="8"/>
Android.permission.WRITE_EXTERNAL_STORAGEを宣言していなくても、問題なくSDカードに書き込むことができました。
Uses-sdkステートメントを次のように変更した場合:
<uses-sdk Android:targetSdkVersion="9" minSdkVersion="8" />
SDカードへの書き込みがすべて、アクセスが拒否されたため失敗しました! Android.permission.WRITE_EXTERNAL_STORAGEが宣言されている必要があることを認めましたが、1つのuses-sdkステートメントで機能し、他のステートメントでは機能しなかったのはなぜですか?
エミュレータをチェックインする場合は、SDカードがmountedであるかどうかを確認します。また、エミュレータを作成するときに、sdcardのサイズを指定することを忘れないでください。次に、追加する必要があります<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
あなたのマニフェスト。