可以將檔案儲存在可移除儲存媒體上(例如:SD卡),這種方式稱為外部儲存,說明如下:
私有的外部檔案:儲存在「/sdcard/Android/data//files/」,會隨著應用程式被移除而一同移除
公開的外部檔案:儲存在「/sdcard/」,不會隨著應用程式被移除而一同移除
建立外部檔案說明如下: 1.呼叫Environment的getExternalStorageState()檢查該儲存媒體是否處於可被存取的狀態 2.建立私有的外部檔案:呼叫Context的getExternalFilesDir() 3.建立公開的外部檔案:呼叫Environment的getExternalStoragePublicDirectory() 4.呼叫MediaScannerConnection的scanFile()啟動媒體掃描器,掃描是否有新的檔案 5.存取外部儲存媒體必須設定:
設計Ch7_5_ExternalStorage.java
- public class Ch7_5_ExternalStorage extends Activity {
- ImageView iv;
- Button btn1,btn2;
- TextView tv2;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn1=(Button)findViewById(R.id.button1);
- btn2=(Button)findViewById(R.id.button2);
- iv=(ImageView)findViewById(R.id.imageView1);
- tv2=(TextView)findViewById(R.id.textView2);
- //私有的外部檔案:儲存在「/sdcard/Android/data//files/」,會隨著應用程式被移除而一同移除
- btn1.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- File path=getExternalFilesDir(Environment.DIRECTORY_PICTURES);
- File file=new File(path,"baby00.jpg");
- CreatFile(file);
- }});
- //公開的外部檔案:儲存在「/sdcard/」,不會隨著應用程式被移除而一同移除
- btn2.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- File path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
- File file=new File(path,"baby00.jpg");
- CreatFile(file);
- }});
- }
- void CreatFile(File file){
- File parentPath=file.getParentFile();
- if(!isSDExist())
- {
- Toast.makeText(this, "SD卡不存在", Toast.LENGTH_LONG).show();
- }
- try {
- if(!parentPath.exists())
- parentPath.mkdir();
- if(file.exists())
- file.delete();
- InputStream is=getResources().openRawResource(R.drawable.baby00);
- OutputStream os=new FileOutputStream(file);
- byte data[]=new byte[is.available()];
- is.read(data);
- os.write(data);
- Toast.makeText(this, "儲存成功", Toast.LENGTH_LONG).show();
- tv2.setText("檔案儲存於"+file.toString());
- is.close();
- os.close();
- } catch (Exception e) {
- Log.d("Ch7_5_EnternalStorage","例外發生: "+e.toString());
- }
- }
- public boolean isSDExist()
- {
- String state=Environment.getExternalStorageState();
- if(state.equals(Environment.MEDIA_MOUNTED))
- return true;
- else
- return false;
- }
- }
復制代碼
建立外部檔案時可以指定欲儲存之目錄類型: DIRECTORY_ALARMS:存放鬧鐘鈴聲 DIRECTORY_DCIM:存放拍攝的相片或視訊檔案 DIRECTORY_DOWNLOADS:存放下載的檔案 DIRECTORY_MOVIES:存放電影檔案 DIRECTORY_MUSIC:存放音樂檔案 DIRECTORY_NOTIFICATIONS:存放通知鈴聲 DIRECTORY_PICTURES:存放相片檔案 DIRECTORY_PODCASTS:存放podcasts檔案 DIRECTORY_RINGTONES:存放來電鈴聲 如果要讓圖片掃描至Gallery刷新紀錄
新增方法
- void callMediaScanner(String paths[]){
- MediaScannerConnection.scanFile(MainActivity.this, paths, null, new MediaScannerConnection.OnScanCompletedListener() {
- public void onScanCompleted(String path, Uri uri) {
- Log.i("ExternalStorage.java", "Scanned"+path);
- }
- });
- }
復制代碼 並在is.close(); os.close();下加
- String paths[]={file.toString()};
- callMediaScanner(paths);
復制代碼
|