کار با فایل ها و فولدرها در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست مطالب:

  1. به دست آوردن آدرس مسیر حافظه خارجی (external storage)، در برنامه نویسی اندروید
  2. ساخت یک فولدر جدید در حافظه خارجی (external storage)، در برنامه نویسی اندروید
  3. ساخت یک فایل متنی در حافظه خارجی (external storage)، با متنی دلخواه، در برنامه نویسی اندروید
  4. حذف یک فولدر (folder) موجود در حافظه خارجی (external storage)، در برنامه نویسی اندروید
  5. چک کردن امکان خواندن و نوشتن فایل در حافظه خارجی (external storage)، در برنامه نویسی اندروید
  6. اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب، با کدنویسی، در برنامه نویسی اندروید
  7. پنهان کردن (hidden) فایل ها و پوشه ها (folder)، در حافظه خارجی (External Storage)، در برنامه نویسی اندروید
  8. مشاهده فایل ها و پوشه های پنهان شده (hidden) در پوشه بندی گوشی اندروید
  9. کپی کردن یک فایل از پوشه raw در پروژه اندروید به درون پوشه ای در حافظه خارجی (External Storage)، در برنامه نویسی اندروید
  10. مشاهده فایل های موجود در پوشه بندی یک گوشی اندروید واقعی، توسط برنامه eclipse
  11. به دست آوردن لیست فایل ها و پوشه های (Folders) موجود در یک پوشه در حافظه خارجی (External Storage)، به صورت آرایه ای (Array) از جنس File (و همچنین شرح چگونگی تبدیل آنها به رشته (String))، در برنامه نویسی اندروید
  12. به دست آوردن مسیر کامل (Absolute Path) مربوط به یک File ، به صورت یک رشته (String)، در برنامه نویسی اندروید
  13. به دست آوردن نام مربوط به یک File (بدون ذکر مسیر کامل)، به صورت یک رشته (String)، در برنامه نویسی اندروید
  14. از حالت فشرده در آوردن (unzip کردن) یک فایل فشرده (فایل zip شده) موجود در حافظه خارجی (External Storage)، در برنامه نویسی اندروید
  15. تفاوت بین حافظه گوشی، حافظه خارجی (External Storage)، حافظه داخلی (Internal Storage) و sd card ، در برنامه نویسی اندروید


منبع: kelidestan
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن آدرس مسیر حافظه خارجی (external storage)، در برنامه نویسی اندروید

به دست آوردن آدرس مسیر حافظه خارجی (external storage)، در برنامه نویسی اندروید

با استفاده از کد زیر، می توانیم آدرس مسیرحافظه خارجی (external storage) گوشی اندروید را به دست بیاوریم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین برای به دست آوردن مسیر کامل (absolute path) آن، باید عبارت زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][/FONT]
[/FONT][/COLOR]
حافظه خارجی (external storage) همان محلی است که در آن، فولدرهای مختلف موجود بر روی گوشی اندروید خود را مشاهده می کنید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت یک فولدر جدید در حافظه خارجی (external storage)، در برنامه نویسی اندروید

ساخت یک فولدر جدید در حافظه خارجی (external storage)، در برنامه نویسی اندروید

با استفاده از کد زیر، می توانیم یک فولدر با نام folderName در حافظه خارجی (external storage) بسازیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/folderName"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
dir.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// build directory[/I][/COLOR][/FONT]
[/FONT][/COLOR]
همچنین قبل از ساخت فولدر، می توانیم چک کنیم که آیا فولدر وجود دارد یا خیر (اگر وجود ندارد، آنگاه کد مربوط به ساخت فولدر، اجرا شود)، یعنی کدها را می توانیم به شکل زیر بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/folderName"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]if[/B][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR]dir.[COLOR=#006633]exists[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]                                 
    dir.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// build directory[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (external storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت یک فایل متنی در حافظه خارجی (external storage)، با متنی دلخواه، در برنامه نویسی اندروید

ساخت یک فایل متنی در حافظه خارجی (external storage)، با متنی دلخواه، در برنامه نویسی اندروید

به کد زیر توجه کنید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 

[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
dir.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// build directory[/I][/COLOR]
[COLOR=#003399]File[/COLOR] file [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]dir, [COLOR=#0000FF]"myData.txt"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

[B]try[/B] [COLOR=#009900]{[/COLOR]
    [COLOR=#003399]FileOutputStream[/COLOR] f [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileOutputStream[/COLOR][COLOR=#009900]([/COLOR]file[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#003399]PrintWriter[/COLOR] pw [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]PrintWriter[/COLOR][COLOR=#009900]([/COLOR]f[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    pw.[COLOR=#006633]println[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"www.www.www.iran-eng.ir"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    pw.[COLOR=#006633]println[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"P O U R I A"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    pw.[COLOR=#006633]flush[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    pw.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    f.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]FileNotFoundException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    e.[COLOR=#006633]printStackTrace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    e.[COLOR=#006633]printStackTrace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
این کد باعث می شود که فولدری با نام myFolder در فولدربندی گوشی ساخته شود و سپس یک فایل متنی با نام myData.txt ساخته شده و متن زیر درون آن نوشته شود :
کد:
[FONT=Tahoma][FONT=monospace][COLOR=#000000]www.[/COLOR][COLOR=#006633]iran-eng[/COLOR][COLOR=#000000].[/COLOR][COLOR=#006633]com
[/COLOR][COLOR=#222222][FONT=Tahoma]P O U R I A
[/FONT][/COLOR][/FONT][/FONT]


دقت شود که باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای ساخت فایل در حافظه خارجی و یا خواندن یک فایل از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
حذف یک فولدر (folder) موجود در حافظه خارجی (external storage)، در برنامه نویسی اندروید

حذف یک فولدر (folder) موجود در حافظه خارجی (external storage)، در برنامه نویسی اندروید

برای حذف یک فولدر (folder) موجود در حافظه خارجی (external storage)، می توانیم از تابع زیر استفاده کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]static[/B] [B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] deleteDirectory[COLOR=#009900]([/COLOR][COLOR=#003399]File[/COLOR] path[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [B]if[/B][COLOR=#009900]([/COLOR] path.[COLOR=#006633]exists[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#003399]File[/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] files [COLOR=#339933]=[/COLOR] path.[COLOR=#006633]listFiles[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [B]if[/B] [COLOR=#009900]([/COLOR]files [COLOR=#339933]==[/COLOR] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
            [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
        [B]for[/B][COLOR=#009900]([/COLOR][COLOR=#000066][B]int[/B][/COLOR] i[COLOR=#339933]=[/COLOR][COLOR=#CC66CC]0[/COLOR][COLOR=#339933];[/COLOR] i[COLOR=#339933]<[/COLOR]files.[COLOR=#006633]length[/COLOR][COLOR=#339933];[/COLOR] i[COLOR=#339933]++[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
            [B]if[/B][COLOR=#009900]([/COLOR]files[COLOR=#009900][[/COLOR]i[COLOR=#009900]][/COLOR].[COLOR=#006633]isDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                deleteDirectory[COLOR=#009900]([/COLOR]files[COLOR=#009900][[/COLOR]i[COLOR=#009900]][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
            [COLOR=#009900]}[/COLOR] [B]else[/B] [COLOR=#009900]{[/COLOR]
                files[COLOR=#009900][[/COLOR]i[COLOR=#009900]][/COLOR].[COLOR=#006633]delete[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
            [COLOR=#009900]}[/COLOR]
        [COLOR=#009900]}[/COLOR]
    [COLOR=#009900]}[/COLOR]
    [B]return[/B][COLOR=#009900]([/COLOR] path.[COLOR=#006633]delete[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (external storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چک کردن امکان خواندن و نوشتن فایل در حافظه خارجی (external storage)، در برنامه نویسی اندروید

چک کردن امکان خواندن و نوشتن فایل در حافظه خارجی (external storage)، در برنامه نویسی اندروید

با کد زیر می توانیم چک کنیم که آیا امکان خواندن و نوشتن در حافظه خارجی (external storage) وجود دارد یا خیر. یک پیام در خروجی نمایش داده می شود که برای هر دو مورد ((خواندن)) و ((نوشتن))، به طور جداگانه اعلام کرده که آیا امکان پذیر هستند یا خیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000066][B]boolean[/B][/COLOR] mExternalStorageAvailable [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]boolean[/B][/COLOR] mExternalStorageWriteable [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] state [COLOR=#339933]=[/COLOR] [COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageState[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

[B]if[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]Environment[/COLOR].[COLOR=#006633]MEDIA_MOUNTED[/COLOR].[COLOR=#006633]equals[/COLOR][COLOR=#009900]([/COLOR]state[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// Can read and write the media[/I][/COLOR]
    mExternalStorageAvailable [COLOR=#339933]=[/COLOR] mExternalStorageWriteable [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]else[/B] [B]if[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]Environment[/COLOR].[COLOR=#006633]MEDIA_MOUNTED_READ_ONLY[/COLOR].[COLOR=#006633]equals[/COLOR][COLOR=#009900]([/COLOR]state[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// Can only read the media[/I][/COLOR]
    mExternalStorageAvailable [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
    mExternalStorageWriteable [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]else[/B] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// Can't read or write[/I][/COLOR]
    mExternalStorageAvailable [COLOR=#339933]=[/COLOR] mExternalStorageWriteable [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]   
[COLOR=#003399]String[/COLOR] message [COLOR=#339933]=[/COLOR][COLOR=#0000FF]"[COLOR=#000099][B]\n[/B][/COLOR][COLOR=#000099][B]\n[/B][/COLOR]External Media: readable="[/COLOR]
    [COLOR=#339933]+[/COLOR]mExternalStorageAvailable[COLOR=#339933]+[/COLOR][COLOR=#0000FF]" writable="[/COLOR][COLOR=#339933]+[/COLOR]mExternalStorageWriteable[COLOR=#339933];[/COLOR]
Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], message, Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
این کد، با استفاده از Toast ، یک پیام را به مدت چند ثانیه به کاربر نمایش می دهد که در آن پیام، وضعیت امکان خواندن و نوشتن فایل در حافظه خارجی (external storage) مشخص شده است.

بد نیست نکته زیر را تذکر بدهیم :

دقت شود که هنگامی که می خواهیم با حافظه خارجی (external storage) کار کنیم، باید کدهای زیر درون AndroidManifest.xml پروژه اندروید نوشته شود (برای اجازه دادن برای ساخت فایل در حافظه خارجی و یا خواندن یک فایل از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب، با کدنویسی

اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب، با کدنویسی

فرض کنید که یک فایل apk درون فولدرهای گوشی اندروید (حافظه خارجی - external storage) داریم و می خواهیم آن را با یک سری کد اجرا کنیم تا پیام نصب به کاربر نمایش داده شود. برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_VIEW[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setDataAndType[/COLOR][COLOR=#009900]([/COLOR]Uri.[COLOR=#006633]fromFile[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR][COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR][COLOR=#0000FF]"/myFolder/"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"myFile.apk"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR], [COLOR=#0000FF]"application/vnd.android.package-archive"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، myFolder نام فولدر حاوی فایل (درون فولدربندی اصلی گوشی) و myFile.apk ، نام فایل apk می باشد. دقت کنید که اگر فایل apk در فولدر اصلی گوشی اندروید قرار گرفته باشد، باید عبارت زیر در کدها را :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]"/myFolder/"[/FONT]
[/FONT][/COLOR]
به عبارت زیر تبدیل کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]"/"[/FONT]
[/FONT][/COLOR]
دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (external storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
پنهان کردن (hidden) فایل ها و پوشه ها (folder)، در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

پنهان کردن (hidden) فایل ها و پوشه ها (folder)، در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

قبل از هر چیز باید تذکر بدهم که منظور از پنهان کردن یک فایل یا پوشه (folder)، تنها این است که اگر کاربر به پوشه بندی اصلی گوشی اندروید خود (یعنی حافظه خارجی) رفت، فایل ها یا پوشه هایی که ما با برنامه اندروید ساخته ایم را نتواند ببیند و هدف تنها این است که پوشه بندی گوشی کاربر، با فایل ها و پوشه هایی که نیاز نیست وی ببیند، شلوغ نشود، بنابراین نباید این مورد را با حفاظت از اطلاعات اشتباه گرفت زیرا با اتصال گوشی به کامپیوتر و طی کردن یک سری مراحل، می توان آن فایل های مخفی (hidden) را نیز مشاهده کرد.


خوب اکنون که متوجه شدید این روش برای حافظت از اطلاعات نیست، نکته بسیار ساده این روش را ذکر می کنیم. شما برای اینکه تعیین کنید که یک فایل یا پوشه (folder) در حافظه خارجی (External Storage) قابل مشاهده توسط کاربر نباشد، تنها کافی است که در ابتدای نام فایل یا پوشه، علامت نقطه (.) را قرار بدهید، به همین سادگی، با یک نقطه ناقابل در ابتدای نام، دیگر فایل یا پوشه قابل مشاهده نیست و به صورت مخفی (hidden) خواهد بود (این یک قرارداد است).


حتی این مورد را می توان با یک گوشی اندروید و بدون کدنویسی، امتحان کرد. به پوشه بندی یک گوشی اندروید بروید و سپس یک فولدر بسازید (ابتدا بدون نقطه). پوشه نمایش داده می شود، اکنون نام پوشه را تغییر بدهید (Rename)، یعنی یک نقطه (.) به ابتدای نام پوشه اضافه کنید، مشاهده خواهید کرد که دیگر پوشه نمایش داده نمی شود، پوشه همچنان وجود دارد، اما به صورت مخفی (hidden) می باشد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مشاهده فایل ها و پوشه های پنهان شده (hidden) در پوشه بندی گوشی اندروید

مشاهده فایل ها و پوشه های پنهان شده (hidden) در پوشه بندی گوشی اندروید

همان طور که قبلا در مبحثی دیگر شرح دادیم، چنانچه یک علامت نقطه (.) را در ابتدای اسم یک فایل یا پوشه (folder) قرار بدهیم، آن فایل یا پوشه، به صورت مخفی (hidden) در می آید و دیگر کاربر نمی تواند آن را مشاهده کند. اما در گوشی اندروید، یک گزینه وجود دارد که اگر آن را فعال نماییم، فایل ها و پوشه های مخفی را می توانیم مشاهده کنیم.
برای این منظور، ابتدا به درون پوشه بندی گوشی اندروید می رویم، مثلا من وارد پوشه زیر در گوشی اندروید خود می شوم که قبلا فایلی را در آن به صورت مخفی در آورده ام :

79.jpg

بر روی دکمه مربوط به منو اشاره می کنیم تا منوی زیر نمایش داده شود :


80.jpg

سپس بر روی گزینه Settings اشاره می کنیم تا صفحه زیر نمایش داده شود :


81.jpg


یک گزینه با نام Show hidden files وجود دارد که باید بر روی آن اشاره کنیم تا یک علامت تیک در کنارش نمایش داده شود. بعد از تیک خوردن این گزینه، فایل ها و پوشه های پنهان (hidden) نمایش داده می شوند. مثلا فایلی که من پنهان کرده بودم را اکنون می توانید مشاهده کنید :


82.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
کپی کردن یک فایل از پوشه raw در پروژه اندروید به درون پوشه ای در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

کپی کردن یک فایل از پوشه raw در پروژه اندروید به درون پوشه ای در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

فرض کنید که یک فایل دلخواه (هر نوع فایلی) را درون پوشه raw از پروژه اندروید داشته باشیم و بخواهیم که آن را به درون پوشه ای درون حافظه خارجی (External Storage) کپی کنیم. مثلا فرض می کنیم که فایل مورد نظرمان، دارای نام my_file.mp3 می باشد :

android-357.jpg

با فرض اینکه بخواهیم فایل با نام جدید defaultName.mp3 و در پوشه ای با نام myFolder در حافظه خارجی (External Storage) کپی شود، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]String[/COLOR] folderName [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] folderName[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]if[/B][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR]dir.[COLOR=#006633]exists[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]                                 
    dir.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// build directory[/I][/COLOR]
[COLOR=#009900]}[/COLOR]
                
[COLOR=#003399]InputStream[/COLOR] in [COLOR=#339933]=[/COLOR] getResources[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]openRawResource[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]raw[/COLOR].[COLOR=#006633]my_file[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] filename [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"defaultName.mp3"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR] f [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]root [COLOR=#339933]+[/COLOR] folderName , filename[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]if[/B][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR]f.[COLOR=#006633]exists[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
    [B]try[/B] [COLOR=#009900]{[/COLOR]
        [COLOR=#003399]OutputStream[/COLOR] out [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileOutputStream[/COLOR][COLOR=#009900]([/COLOR]f[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] buffer [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#CC66CC]1024[/COLOR][COLOR=#009900]][/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#000066][B]int[/B][/COLOR] len[COLOR=#339933];[/COLOR]
        [B]while[/B][COLOR=#009900]([/COLOR][COLOR=#009900]([/COLOR]len [COLOR=#339933]=[/COLOR] in.[COLOR=#006633]read[/COLOR][COLOR=#009900]([/COLOR]buffer, [COLOR=#CC66CC]0[/COLOR], buffer.[COLOR=#006633]length[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]!=[/COLOR] [COLOR=#339933]-[/COLOR][COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
            out.[COLOR=#006633]write[/COLOR][COLOR=#009900]([/COLOR]buffer, [COLOR=#CC66CC]0[/COLOR], len[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
        in.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        out.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]FileNotFoundException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// [/I][/COLOR]
    [COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]//[/I][/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (External Storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
برای درک موقعیت قرارگیری کد بالا در فایل AndroidManifest.xml از پروژه اندروید، کدهایی را به عنوان مثالی از کدهای فایل AndroidManifest.xml در زیر ذکر کرده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]manifest xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    [B]package[/B][COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionCode[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionName[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]sdk
        android[COLOR=#339933]:[/COLOR]minSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"8"[/COLOR]
        android[COLOR=#339933]:[/COLOR]targetSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"18"[/COLOR] [COLOR=#339933]/>[/COLOR]
    
    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]

    [COLOR=#339933]<[/COLOR]application
        android[COLOR=#339933]:[/COLOR]allowBackup[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"true"[/COLOR]
        android[COLOR=#339933]:[/COLOR]icon[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ic_launcher"[/COLOR]
        android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR]
        android[COLOR=#339933]:[/COLOR]theme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/AppTheme"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com.MainActivity"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR] [COLOR=#339933]>[/COLOR]
            [COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
                [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.MAIN"[/COLOR] [COLOR=#339933]/>[/COLOR]

                [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.LAUNCHER"[/COLOR] [COLOR=#339933]/>[/COLOR]
            [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com.Activity_2"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity_activity_2"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com.Activity_3"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity_activity_3"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]</[/COLOR]application[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]manifest[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
[h=2]توضیحات بیشتر در مورد کدها :[/h]با استفاده از کد زیر، آدرس مسیر حافظه خارجی (external storage) را به دست آورده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
نام پوشه ای که باید فایل در آن کپی شود را در خط زیر تعیین کرده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] folderName [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
با کد زیر، مسیر کامل پوشه را به صورت متغیر File خواهیم داشت :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] folderName[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
با کدهای زیر، تعیین کرده ایم که اگر پوشه مورد نظر وجود ندارد، ساخته شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]if[/B][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR]dir.[COLOR=#006633]exists[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]                                 
    dir.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// build directory[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
فایلی که قصد داریم کپی شود را در خط زیر مشخص کرده ایم (از پوشه raw) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]InputStream[/COLOR] in [COLOR=#339933]=[/COLOR] getResources[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]openRawResource[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]raw[/COLOR].[COLOR=#006633]my_file[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
و نام مورد نظرمان برای فایلی که از آن کپی می شود (ساخته می شود) را در خط زیر از کدها مشخص کرده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] filename [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"defaultName.mp3"[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
و مسیر کامل آن را به صورت زیر، در یک متغیر از نوع File مشخص کرده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] f [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]root [COLOR=#339933]+[/COLOR] folderName , filename[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
سپس با کدهای زیر تعیین کرده ایم که اگر فایل در مسیر تعیین شده، وجود ندارد، ساخته شود (کپی شود) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]if[/B][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR]f.[COLOR=#006633]exists[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
    [B]try[/B] [COLOR=#009900]{[/COLOR]
        [COLOR=#003399]OutputStream[/COLOR] out [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileOutputStream[/COLOR][COLOR=#009900]([/COLOR]f[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] buffer [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#CC66CC]1024[/COLOR][COLOR=#009900]][/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#000066][B]int[/B][/COLOR] len[COLOR=#339933];[/COLOR]
        [B]while[/B][COLOR=#009900]([/COLOR][COLOR=#009900]([/COLOR]len [COLOR=#339933]=[/COLOR] in.[COLOR=#006633]read[/COLOR][COLOR=#009900]([/COLOR]buffer, [COLOR=#CC66CC]0[/COLOR], buffer.[COLOR=#006633]length[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]!=[/COLOR] [COLOR=#339933]-[/COLOR][COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
            out.[COLOR=#006633]write[/COLOR][COLOR=#009900]([/COLOR]buffer, [COLOR=#CC66CC]0[/COLOR], len[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
        in.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        out.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]FileNotFoundException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// [/I][/COLOR]
    [COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]//[/I][/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای فوق، از try و catch استفاده شده است که به منظور عدم ایجاد Force Close (بسته شدن برنامه) هنگام مواجه شدن با خطا به کار می رود.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مشاهده فایل های موجود در پوشه بندی یک گوشی اندروید واقعی، توسط برنامه eclipse

مشاهده فایل های موجود در پوشه بندی یک گوشی اندروید واقعی، توسط برنامه eclipse

برای مشاهده فایل های موجود در پوشه بندی یک گوشی اندروید واقعی، توسط برنامه eclipse ، ابتدا باید گوشی اندروید مورد نظرمان را با کابل USB به کامپیوتر وصل کنیم. دقت داشته باشید که شناسایی گوشی اندروید توسط کامپیوتر، خود دارای نکات بسیاری است که قبلا همه آنها را در مبحثی دیگر در مورد اجرا یا خطایابی برنامه اندروید بر روی یک گوشی اندروید واقعی شرح دادیم و دیگر نیازی به تکرار آنها نیست، تنها لینک آن مبحث را در زیر برایتان قرار می دهم تا در صورتی که گوشی توسط کامیپوتر شناسایی نشد و نتوانستید فایل های آن را ببینید، نکات موجود در آن مبحث را بخوانید : #44وقتی من گوشی خود را با کابل USB به کامپیوتر وصل می کنم، پنجره زیر در گوشی به من نمایش داده می شود :

100.jpg

اکنون در پنجره برنامه eclipse ، از منوی Window ، ابتدا گزینه Open Perspective و سپس گزینه DDMS را انتخاب می کنیم :

102.jpg

بنابراین، در پنجره ای که نمایش داده می شود، نام گوشی شناسایی شده، در سمت چپ نوشته می شود و همچنین، در قسمت File Explorer می توانیم پوشه بندی گوشی اندروید را مشاهده کنیم (قبل از بررسی پوشه ها، حتما به نکته ای که در ادامه گفته می شود، توجه کنید) :


104.jpg

اما نکته مهم در این مرحله این است که شما پوشه های اصلی گوشی اندروید (پوشه هایی که کاربر آنها را در گوشی خود مشاهده می کند) را نمی بینید، بلکه یک سری پوشه دیگر با نام های غیر آشنا فهرست شده است. در واقع، شما باید به دنبال پوشه اصلی گوشی اندروید که قابل مشاهده توسط کاربر است، بگردید. با توجه به گوشی اندروید شما، آن پوشه، در یکی از مسیرهای زیر خواهد بود (یا مسیرهایی مشابه آنها) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]/[/COLOR]mnt[COLOR=#339933]/[/COLOR]sdcard[COLOR=#339933]/[/COLOR][/FONT]
[/FONT][/COLOR]
یا :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]/[/COLOR]storage[COLOR=#339933]/[/COLOR]sdcard0[COLOR=#339933]/[/COLOR][/FONT]
[/FONT][/COLOR]
یا :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]/[/COLOR]mnt[COLOR=#339933]/[/COLOR]shell[COLOR=#339933]/[/COLOR]emulated[COLOR=#339933]/[/COLOR][COLOR=#CC66CC]0[/COLOR][COLOR=#339933]/[/COLOR][/FONT]
[/FONT][/COLOR]
مثلا در گوشی اندروید من، مسیر پوشه اصلی، به صورت زیر می باشد :

101.jpg


هر زمان که موارد مورد نظر خود را مشاهده کردید و دیگر با فایل های گوشی کاری نداشتید، برای بازگشت به حالت قبلی پنجره eclipse که در آن، پنجره های مربوط به برنامه نویسی برای پروژه اندروید (مثل پنجره Package Explorer)، قابل مشاهده بود، در گوشه بالا سمت راست پنجره eclipse ، بر روی گزینه Java کلیک می کنیم :

103.png

با کلیک بر روی آن گزینه، همان شکل اولیه پنجره eclipse که برای ویرایش پروژه های اندروید است، نمایش داده می شود.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن لیست فایل ها و پوشه های (Folders) موجود در یک پوشه در حافظه خارجی (External Storage)

به دست آوردن لیست فایل ها و پوشه های (Folders) موجود در یک پوشه در حافظه خارجی (External Storage)

به دست آوردن لیست فایل ها و پوشه های (Folders) موجود در یک پوشه در حافظه خارجی (External Storage)، به صورت آرایه ای (Array) از جنس File (و همچنین شرح چگونگی تبدیل آنها به رشته (String))، در برنامه نویسی اندروید :


فرض کنید در حافظه خارجی (External Storage)، یک پوشه با نام myFolder داریم و قصد داریم که لیست فایل ها و پوشه های (Folders) موجود در آن پوشه را به صورت آرایه ای (Array) از جنس File به دست آوریم، برای این منظور، گدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] list [COLOR=#339933]=[/COLOR] dir.[COLOR=#006633]listFiles[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
خط اول کدها برای به دست آوردن آدرس مسیر حافظه خارجی (External Storage) می باشد.

دقت شود که در این روش، لیست فایل ها و پوشه های مخفی (که نام آنها با یک نقطه شروع می شود ) نیز نمایش داده می شود.

اکنون فرض کنید بخواهیم مسیر کامل (absolute path) مربوط به اولین عنصر در آرایه (اولین فایل یا پوشه شناسایی شده) را به صورت یک رشته (String) به دست آوریم، برای این منظور، کد زیر را می نویسیم (از روش getAbsolutePath استفاده می کنیم) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] list [COLOR=#339933]=[/COLOR] dir.[COLOR=#006633]listFiles[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR] file [COLOR=#339933]=[/COLOR] list[COLOR=#009900][[/COLOR][COLOR=#CC66CC]0[/COLOR][COLOR=#009900]][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] str [COLOR=#339933]=[/COLOR] file.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
یا فرض کنید بخواهیم تنها نام (بدون ذکر مسیر) مربوط به اولین عنصر در آرایه (اولین فایل یا پوشه شناسایی شده) را به صورت یک رشته (String) به دست آوریم، برای این منظور، کد زیر را می نویسیم (از روش getName استفاده می کنیم) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] list [COLOR=#339933]=[/COLOR] dir.[COLOR=#006633]listFiles[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR] file [COLOR=#339933]=[/COLOR] list[COLOR=#009900][[/COLOR][COLOR=#CC66CC]0[/COLOR][COLOR=#009900]][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] str [COLOR=#339933]=[/COLOR] file.[COLOR=#006633]getName[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نکته :[/h]دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (External Storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن مسیر کامل (Absolute Path) مربوط به یک File ، به صورت یک رشته (String)، در برنامه نویسی اندروید

به دست آوردن مسیر کامل (Absolute Path) مربوط به یک File ، به صورت یک رشته (String)، در برنامه نویسی اندروید

فرض کنید یک File با نام file داریم و می خواهیم مسیر کامل (Absolute Path) مربوط به آن را به صورت یک رشته (String) به دست آوریم. برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] str [COLOR=#339933]=[/COLOR] file.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن نام مربوط به یک File (بدون ذکر مسیر کامل)، به صورت یک رشته (String)، در برنامه نویسی اندروید

به دست آوردن نام مربوط به یک File (بدون ذکر مسیر کامل)، به صورت یک رشته (String)، در برنامه نویسی اندروید

فرض کنید یک File با نام file داریم و می خواهیم نام مربوط به آن (تنها نام - بدون ذکر مسیر کامل) را به صورت یک رشته (String) به دست آوریم. برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] str [COLOR=#339933]=[/COLOR] file.[COLOR=#006633]getName[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
از حالت فشرده در آوردن (unzip کردن) یک فایل فشرده (فایل zip شده) موجود در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

از حالت فشرده در آوردن (unzip کردن) یک فایل فشرده (فایل zip شده) موجود در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

فرض کنید که در حافظه خارجی (External Storage)، یک پوشه (Folder) با نام myFolder داریم که در آن، یک فایل فشرده با نام kelidestan.zip قرار دارد. اکنون قصد داریم که این فایل را از حالت فشرده در بیاوریم. برای این منظور، کدهای زیر را اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]String[/COLOR] directory_string [COLOR=#339933]=[/COLOR] root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder/"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] zipName [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"kelidestan.zip"[/COLOR][COLOR=#339933];[/COLOR]
unpackZip[COLOR=#009900]([/COLOR]directory_string, zipName[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای بالا، از تابعی با نام unpackZip استفاده شده که آن را خودمان با کدهای زیر تعریف می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]private[/B] [COLOR=#000066][B]boolean[/B][/COLOR] unpackZip[COLOR=#009900]([/COLOR][COLOR=#003399]String[/COLOR] path, [COLOR=#003399]String[/COLOR] zipname[COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]       
         [COLOR=#003399]InputStream[/COLOR] is[COLOR=#339933];[/COLOR]
         [COLOR=#003399]ZipInputStream[/COLOR] zis[COLOR=#339933];[/COLOR]
         [B]try[/B] 
         [COLOR=#009900]{[/COLOR]
                 [COLOR=#003399]String[/COLOR] filename[COLOR=#339933];[/COLOR]
                 is [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileInputStream[/COLOR][COLOR=#009900]([/COLOR]path [COLOR=#339933]+[/COLOR] zipname[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                 zis [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]ZipInputStream[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] [COLOR=#003399]BufferedInputStream[/COLOR][COLOR=#009900]([/COLOR]is[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]          
                 [COLOR=#003399]ZipEntry[/COLOR] ze[COLOR=#339933];[/COLOR]
                 [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] buffer [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#CC66CC]1024[/COLOR][COLOR=#009900]][/COLOR][COLOR=#339933];[/COLOR]
                 [COLOR=#000066][B]int[/B][/COLOR] count[COLOR=#339933];[/COLOR]

                 [B]while[/B] [COLOR=#009900]([/COLOR][COLOR=#009900]([/COLOR]ze [COLOR=#339933]=[/COLOR] zis.[COLOR=#006633]getNextEntry[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]!=[/COLOR] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#009900])[/COLOR] 
                 [COLOR=#009900]{[/COLOR]
                         [COLOR=#666666][I]// zapis do souboru[/I][/COLOR]
                         filename [COLOR=#339933]=[/COLOR] ze.[COLOR=#006633]getName[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

                         [COLOR=#666666][I]// Need to create directories if not exists, or[/I][/COLOR]
                         [COLOR=#666666][I]// it will generate an Exception...[/I][/COLOR]
                         [B]if[/B] [COLOR=#009900]([/COLOR]ze.[COLOR=#006633]isDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                                [COLOR=#003399]File[/COLOR] fmd [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]path [COLOR=#339933]+[/COLOR] filename[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                                fmd.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                                [B]continue[/B][COLOR=#339933];[/COLOR]
                         [COLOR=#009900]}[/COLOR]

                         [COLOR=#003399]FileOutputStream[/COLOR] fout [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileOutputStream[/COLOR][COLOR=#009900]([/COLOR]path [COLOR=#339933]+[/COLOR] filename[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

                         [COLOR=#666666][I]// cteni zipu a zapis[/I][/COLOR]
                         [B]while[/B] [COLOR=#009900]([/COLOR][COLOR=#009900]([/COLOR]count [COLOR=#339933]=[/COLOR] zis.[COLOR=#006633]read[/COLOR][COLOR=#009900]([/COLOR]buffer[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]!=[/COLOR] [COLOR=#339933]-[/COLOR][COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR] 
                         [COLOR=#009900]{[/COLOR]
                                 fout.[COLOR=#006633]write[/COLOR][COLOR=#009900]([/COLOR]buffer, [COLOR=#CC66CC]0[/COLOR], count[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]             
                         [COLOR=#009900]}[/COLOR]

                         fout.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]               
                         zis.[COLOR=#006633]closeEntry[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                 [COLOR=#009900]}[/COLOR]

                 zis.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         [COLOR=#009900]}[/COLOR] 
         [B]catch[/B][COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR]
         [COLOR=#009900]{[/COLOR]
                 e.[COLOR=#006633]printStackTrace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                 [B]return[/B] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
         [COLOR=#009900]}[/COLOR]

        [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
یعنی به عنوان مثال، کل کدهای Activity می تواند به صورت زیر باشد (یک Activity دلخواه) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.kelidestan.com[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]java.io.BufferedInputStream[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.io.File[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.io.FileInputStream[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.io.FileOutputStream[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.io.IOException[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.io.InputStream[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.util.zip.ZipEntry[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]java.util.zip.ZipInputStream[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.app.Activity[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View.OnClickListener[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Button[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Toast[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] MainActivity [B]extends[/B] Activity [COLOR=#009900]{[/COLOR]

        @Override
        [B]protected[/B] [COLOR=#000066][B]void[/B][/COLOR] onCreate[COLOR=#009900]([/COLOR]Bundle savedInstanceState[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                [B]super[/B].[COLOR=#006633]onCreate[/COLOR][COLOR=#009900]([/COLOR]savedInstanceState[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                setContentView[COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]activity_main[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

                [COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
                [COLOR=#003399]String[/COLOR] directory_string [COLOR=#339933]=[/COLOR] root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder/"[/COLOR][COLOR=#339933];[/COLOR]
                [COLOR=#003399]String[/COLOR] zipName [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"kelidestan.zip"[/COLOR][COLOR=#339933];[/COLOR]
                unpackZip[COLOR=#009900]([/COLOR]directory_string, zipName[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                
        [COLOR=#009900]}[/COLOR]
        
        
        [B]private[/B] [COLOR=#000066][B]boolean[/B][/COLOR] unpackZip[COLOR=#009900]([/COLOR][COLOR=#003399]String[/COLOR] path, [COLOR=#003399]String[/COLOR] zipname[COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]       
             [COLOR=#003399]InputStream[/COLOR] is[COLOR=#339933];[/COLOR]
             [COLOR=#003399]ZipInputStream[/COLOR] zis[COLOR=#339933];[/COLOR]
             [B]try[/B] 
             [COLOR=#009900]{[/COLOR]
                 [COLOR=#003399]String[/COLOR] filename[COLOR=#339933];[/COLOR]
                 is [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileInputStream[/COLOR][COLOR=#009900]([/COLOR]path [COLOR=#339933]+[/COLOR] zipname[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                 zis [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]ZipInputStream[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] [COLOR=#003399]BufferedInputStream[/COLOR][COLOR=#009900]([/COLOR]is[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]          
                 [COLOR=#003399]ZipEntry[/COLOR] ze[COLOR=#339933];[/COLOR]
                 [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR] buffer [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#000066][B]byte[/B][/COLOR][COLOR=#009900][[/COLOR][COLOR=#CC66CC]1024[/COLOR][COLOR=#009900]][/COLOR][COLOR=#339933];[/COLOR]
                 [COLOR=#000066][B]int[/B][/COLOR] count[COLOR=#339933];[/COLOR]

                 [B]while[/B] [COLOR=#009900]([/COLOR][COLOR=#009900]([/COLOR]ze [COLOR=#339933]=[/COLOR] zis.[COLOR=#006633]getNextEntry[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]!=[/COLOR] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#009900])[/COLOR] 
                 [COLOR=#009900]{[/COLOR]
                     [COLOR=#666666][I]// zapis do souboru[/I][/COLOR]
                     filename [COLOR=#339933]=[/COLOR] ze.[COLOR=#006633]getName[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

                     [COLOR=#666666][I]// Need to create directories if not exists, or[/I][/COLOR]
                     [COLOR=#666666][I]// it will generate an Exception...[/I][/COLOR]
                     [B]if[/B] [COLOR=#009900]([/COLOR]ze.[COLOR=#006633]isDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                        [COLOR=#003399]File[/COLOR] fmd [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]path [COLOR=#339933]+[/COLOR] filename[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        fmd.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        [B]continue[/B][COLOR=#339933];[/COLOR]
                     [COLOR=#009900]}[/COLOR]

                     [COLOR=#003399]FileOutputStream[/COLOR] fout [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileOutputStream[/COLOR][COLOR=#009900]([/COLOR]path [COLOR=#339933]+[/COLOR] filename[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

                     [COLOR=#666666][I]// cteni zipu a zapis[/I][/COLOR]
                     [B]while[/B] [COLOR=#009900]([/COLOR][COLOR=#009900]([/COLOR]count [COLOR=#339933]=[/COLOR] zis.[COLOR=#006633]read[/COLOR][COLOR=#009900]([/COLOR]buffer[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]!=[/COLOR] [COLOR=#339933]-[/COLOR][COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR] 
                     [COLOR=#009900]{[/COLOR]
                         fout.[COLOR=#006633]write[/COLOR][COLOR=#009900]([/COLOR]buffer, [COLOR=#CC66CC]0[/COLOR], count[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]             
                     [COLOR=#009900]}[/COLOR]

                     fout.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]               
                     zis.[COLOR=#006633]closeEntry[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                 [COLOR=#009900]}[/COLOR]

                 zis.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
             [COLOR=#009900]}[/COLOR] 
             [B]catch[/B][COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR]
             [COLOR=#009900]{[/COLOR]
                 e.[COLOR=#006633]printStackTrace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                 [B]return[/B] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
             [COLOR=#009900]}[/COLOR]

            [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
        

[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نکته :[/h]معمولا در کامپیوتر، وقتی یک فایل zip شده را unzip می کنیم، پوشه ای دقیقا هم نام با آن فایل zip می سازد و فایل ها درون آن قرار می گیرند، ولی کد بالا، چنین پوشه ای را نمی سازد.

[h=4]نکته :[/h]دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (External Storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تفاوت بین حافظه گوشی، حافظه خارجی (External Storage)، حافظه داخلی (Internal Storage) و sd card ، در برنامه نویسی اندروید

تفاوت بین حافظه گوشی، حافظه خارجی (External Storage)، حافظه داخلی (Internal Storage) و sd card ، در برنامه نویسی اندروید

در مورد لغات حافظه گوشی، حافظه خارجی (External Storage)، حافظه داخلی (Internal Storage) و sd card ، گاهی آنها را با هم اشتباه می گیریم.


از نگاه برنامه نویسی اندروید (یا در واقع نصب یک برنامه روی گوشی اندروید)، حافظه گوشی (که در هنگام خرید گوشی، روی خود آن است و قطعه اضافی نیست)، به دو قسمت حافظه خارجی (External Storage) و حافظه داخلی (Internal Storage) تقسیم می شود (منظورم از نظر اختصاص دادن حافظه است، چون در برخی گوشی ها، این دو از نظر سخت افزاری ممکن است جدا باشند و در برخی، از نظر سخت افزاری از یک قطعه بهره ببرند).
هر دوی آنها را همه گوشی ها دارند. همه گوشی ها یک حافظه خارجی (External Storage) دارند که قابل برداشتن (removeable) نیست (یعنی جدا از حافظه هایی که removeable هستند، شاید بهتر باشد آنهایی که removeable هستند را removeable external storage بنامیم که اشتباهی رخ ندهد). حافظه داخلی (Internal Storage) مختص برنامه اندروید نصب شده خواهد بود (یعنی سایر برنامه های اندروید و یا کاربر، نمی توانند به اطلاعات موجود در آن دسترسی داشته باشند، مگر با روش های هک کردن) و حافظه خارجی (External Storage)، بخش دیگر و قابل دسترسی توسط کاربر و سایر برنامه ها می باشد. دقت شود که این موارد، جدا از پوشه هایی مثل raw و assets می باشد که در برنامه اندروید قرار می دهیم (این پوشه ها درون فایل APK قرار می گیرند).


در مورد لغت sd card ، به حافظه گوشی و یا حافظه خارجی (External Storage) نیز sd card گفته می شود (به همین دلیل گاهی در کدنویسی تعیین آدرسی در حافظه خارجی (Internal Storage)، لغت sdcard را می بینید)، بنابراین بهتر است برای حافظه هایی که به گوشی اضافه می کنیم (جدا از حافظه اصلی که توسط کارخانه در آن قرار داده شده)، عبارت removeable sd card را به کار ببریم (منظورم از نظر نام آنها است، نه در آدرس دهی).
 
بالا