在SD卡上写入权限的权限

lan*_*nds 4 permissions android sd-card

我写SD卡时遇到问题,这里是代码:(对不起代码的布局,只需复制它)

public class SaveAndReadManager {

 private String result;
 private String saveFileName = "eventlist_savefile";

 public String writeToFile( ArrayList<Event> arrlEvents ){
  FileOutputStream fos = null;
  ObjectOutputStream out = null;

  try{
   File root = Environment.getExternalStorageDirectory();

   if( root.canWrite() ){
    fos = new FileOutputStream( saveFileName );
    out = new ObjectOutputStream( fos );
    out.writeObject( arrlEvents );

    result = "File written";

    out.close();
   }else{
    result = "file cant write";
   }
  }catch( IOException e ){
   e.printStackTrace();
   result = "file not written";
  }

  return result;
 }

 public boolean readFromFile(){
  return false;
 }
}
Run Code Online (Sandbox Code Playgroud)

我还没有实现readFromFile().问题是root.canWrite()一直返回false.这是清单文件:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".InfoScreen"
           android:label="@string/app_name">
      <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
Run Code Online (Sandbox Code Playgroud)

    <activity android:name=".EventCalendar"
              android:label="@string/app_name" />

    <activity android:name=".MakeEvent"
              android:label="@string/app_name" />

    <activity android:name=".ViewEvent"
              android:label="@string/app_name" />

</application>
<uses-sdk android:minSdkVersion="8" />
Run Code Online (Sandbox Code Playgroud)

我已经要求允许写入,并且在我的avd上,如果我去设置 - > SD卡和手机存储,它告诉我在SD卡上有1 gb可以写入.请帮忙.

谢谢:)

Jos*_*emm 6

在尝试写入SD卡之前,请尝试检查SD卡的状态.它可以用作共享驱动器,损坏,完整等.可以在此处找到状态列表:http://developer.android.com/reference/android/os/Environment.html

以下是获取状态的示例:

String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        mExternalStorageAvailable = mExternalStorageWriteable = true;
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        mExternalStorageAvailable = true;
        mExternalStorageWriteable = false;
    } else {
        mExternalStorageAvailable = mExternalStorageWriteable = false;
    }
Run Code Online (Sandbox Code Playgroud)