每個 Android兼容的設備支持共享"外部存儲",你可以用它來保存文件. 這可以是一個可移動存儲介質(如SD卡)或內部(不可移動)存儲. 文件保存到外部存儲是全世界可讀的, 當啟用電腦USB存儲傳輸文件時可以修改的.
首先, 調用getExternalStorageState()檢查是否有可用的媒體.
訪問外部存儲上的文件 -
如果使用API Level 8(Android 2.2)或以上, 使用getExternalFilesDir()來打開一個文件, 表示你應該保存文件在該外部存儲目錄. 這個方法接受一個類型參數指定子目錄的類型; 如DIRECTORY_MUSIC和DIRECTORY_RINGTONES(傳遞 null, 以得到應用程序文件的根目錄). 此方法將創建相應的目錄. 通過指定類型的目錄, 確保在Android的媒體掃描器可以適當的分類你的文件(例如, 鈴聲被確定為不鈴聲和音樂). 如果用戶卸載(uninstall)應用程序,這個目錄及其所有內容將被刪除.
如果你使用API Level 7或以下, 使用getExternalStorageDirectory()打開一個文件表示外部存儲的根目錄, 你應該在下面的目錄寫入你的數據:
/Android/data/<package_name>/files/
例子:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Very simple code to copy a picture from the application's resource into the external file"
/>
<TextView
android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
AndroidExternalFiles.java
package com.AndroidExternalFiles;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;
public class AndroidExternalFiles extends Activity {
TextView textInfo;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textInfo = (TextView)findViewById(R.id.info);
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
createExternalStoragePrivateFile();
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
textInfo.setText("The media is Read Only!");
} else {
textInfo.setText("Something Wrong!");
}
}
void createExternalStoragePrivateFile() {
// Create a path where we will place our private file on external
// storage.
File file = new File(getExternalFilesDir(null), "myFile.jpg");
try {
// Very simple code to copy a picture from the application's
// resource into the external file.
InputStream is = getResources().openRawResource(R.drawable.icon);
OutputStream os = new FileOutputStream(file);
byte[] data = new byte[is.available()];
is.read(data);
os.write(data);
is.close();
os.close();
textInfo.setText("File have been wrote.");
} catch (IOException e) {
// Unable to create file, likely because external storage is
// not currently mounted.
textInfo.setText("IOException: " + e.toString());
}
}
}
在AndroidManifest.xml加入"android.permission.WRITE_EXTERNAL_STORAGE"權限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.AndroidExternalFiles"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".AndroidExternalFiles"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
沒有留言:
發佈留言