TShopping

 找回密碼
 註冊
搜索
TShopping 精選文章 Android 手機開發 查看內容

[Android智慧型手機設計_External storage:存取行動裝置的記憶體]

2013-7-10 19:53| 發佈者: woff| 查看: 721| 評論: 0|原作者: woff

摘要: 可以將檔案儲存在可移除儲存媒體上(例如:SD卡),這種方式稱為外部儲存,說明如下: 私有的外部檔案:儲存在「/sdcard/Android/data/package_name/files/」,會隨著應用程式被移除而一同移除 公開的外部檔案:儲存 ...
 

1.jpg



可以將檔案儲存在可移除儲存媒體上(例如:SD卡),這種方式稱為外部儲存,說明如下:


私有的外部檔案:儲存在「/sdcard/Android/data//files/」,會隨著應用程式被移除而一同移除


公開的外部檔案:儲存在「/sdcard/」,不會隨著應用程式被移除而一同移除


建立外部檔案說明如下:


1.呼叫Environment的getExternalStorageState()檢查該儲存媒體是否處於可被存取的狀態
2.建立私有的外部檔案:呼叫Context的getExternalFilesDir()
3.建立公開的外部檔案:呼叫Environment的getExternalStoragePublicDirectory()
4.呼叫MediaScannerConnection的scanFile()啟動媒體掃描器,掃描是否有新的檔案
5.存取外部儲存媒體必須設定:


設計Ch7_5_ExternalStorage.java

  1. public class Ch7_5_ExternalStorage extends Activity {
  2. ImageView iv;
  3. Button btn1,btn2;
  4. TextView tv2;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.main);
  9. btn1=(Button)findViewById(R.id.button1);
  10. btn2=(Button)findViewById(R.id.button2);
  11. iv=(ImageView)findViewById(R.id.imageView1);
  12. tv2=(TextView)findViewById(R.id.textView2);
  13. //私有的外部檔案:儲存在「/sdcard/Android/data//files/」,會隨著應用程式被移除而一同移除
  14. btn1.setOnClickListener(new OnClickListener(){

  15. @Override
  16. public void onClick(View v) {
  17. File path=getExternalFilesDir(Environment.DIRECTORY_PICTURES);
  18. File file=new File(path,"baby00.jpg");
  19. CreatFile(file);
  20. }});
  21. //公開的外部檔案:儲存在「/sdcard/」,不會隨著應用程式被移除而一同移除
  22. btn2.setOnClickListener(new OnClickListener(){

  23. @Override
  24. public void onClick(View v) {
  25. File path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
  26. File file=new File(path,"baby00.jpg");
  27. CreatFile(file);
  28. }});
  29. }
  30. void CreatFile(File file){
  31. File parentPath=file.getParentFile();
  32. if(!isSDExist())
  33. {
  34. Toast.makeText(this, "SD卡不存在", Toast.LENGTH_LONG).show();
  35. }
  36. try {
  37. if(!parentPath.exists())
  38. parentPath.mkdir();
  39. if(file.exists())
  40. file.delete();
  41. InputStream is=getResources().openRawResource(R.drawable.baby00);
  42. OutputStream os=new FileOutputStream(file);
  43. byte data[]=new byte[is.available()];
  44. is.read(data);
  45. os.write(data);
  46. Toast.makeText(this, "儲存成功", Toast.LENGTH_LONG).show();
  47. tv2.setText("檔案儲存於"+file.toString());
  48. is.close();
  49. os.close();
  50. } catch (Exception e) {
  51. Log.d("Ch7_5_EnternalStorage","例外發生: "+e.toString());
  52. }
  53. }
  54. public boolean isSDExist()
  55. {
  56. String state=Environment.getExternalStorageState();
  57. if(state.equals(Environment.MEDIA_MOUNTED))
  58. return true;
  59. else
  60. return false;
  61. }
  62. }
復制代碼



建立外部檔案時可以指定欲儲存之目錄類型:
DIRECTORY_ALARMS:存放鬧鐘鈴聲
DIRECTORY_DCIM:存放拍攝的相片或視訊檔案
DIRECTORY_DOWNLOADS:存放下載的檔案
DIRECTORY_MOVIES:存放電影檔案
DIRECTORY_MUSIC:存放音樂檔案
DIRECTORY_NOTIFICATIONS:存放通知鈴聲
DIRECTORY_PICTURES:存放相片檔案
DIRECTORY_PODCASTS:存放podcasts檔案
DIRECTORY_RINGTONES:存放來電鈴聲

如果要讓圖片掃描至Gallery刷新紀錄
2.JPG
新增方法
  1. void callMediaScanner(String paths[]){
  2. MediaScannerConnection.scanFile(MainActivity.this, paths, null, new MediaScannerConnection.OnScanCompletedListener() {
  3. public void onScanCompleted(String path, Uri uri) {
  4. Log.i("ExternalStorage.java", "Scanned"+path);
  5. }
  6. });
  7. }
復制代碼

並在is.close();
os.close();下加
  1. String paths[]={file.toString()};
  2. callMediaScanner(paths);
復制代碼



最新評論



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2017-7-29 03:01 , Processed in 0.040121 second(s), 21 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回頂部