آموزش اندروید استودیوآموزش های برنامه نویسی اندروید

آموزش برنامه نویسی اندروید با اندروید استودیو (بخش پنجاه و پنجم: بررسی امکان دسترسی خواندن و نوشتن در حافظه )

دسترسی خواندن و نوشتن در حافظه موضوع مورد بحث این بخش است.

در این بخش از آموزش برنامه نویسی اندروید، می خواهیم بررسی کنیم که آیا می توانیم فایلی را در حافظه ی خارجی توسط اپلیکیشن بنویسیم؟

به عبارتی آیا اپلیکیشن ما اجازه ی این کار را دارد؟

این بخش، پیش نیاز کار با فایل ها در برنامه نویسی اندروید است.

پس بررسی موضوع دسترسی خواندن و نوشتن در حافظه ی خارجی ، می تواند به ما در کار با فایل ها کمک نماید.

قبل از هر چیز دقت نمایید که حافظه ی گوشی و یا تبلت اندرویدی به دو قسمت حافظه ی داخلی و حافظه ی خارجی تقسیم می شود.

که نام انگلیسی آن ها به ترتیب Internal Memory و External Memory می باشد.

کاربر به Internal Memory دسترسی ندارد. بلکه به External Memory دسترسی دارد.

هدف ما در این بخش نیز بررسی دسترسی اپلیکیشن به این حافظه می باشد.

دقت کنید که External Memory را با Sd Card که یعنی کارت حافظه ی Sd ، با قابلیت جداشدن است، اشتباه نگیرید.

برنامه نویسی جاوای این پروژه

به قسمت کد جاوای برنامه یعنی MainActivity.java می رویم.

در ابتدا در متد ()onCreate دو متیر از نوع Boolean معرفی می کنیم.

boolean memoryExternalStorageAvailable = false;
boolean memoryExternalStorageWrite = false;

متغیر اولی، یعنی memoryExternalStorageAvailable بررسی می کند که آیا می توان به حافظه دسترسی پیدا کرد؟ به عبارتی آیا حافظه ی خارجی برای اپلیکیشن حاضر (Available) است؟ (Read)

متغیر دومی، یعنی memoryExternalStorageWrite بررسی می کند که آیا امکان نوشتن در حافظه وجود دارد؟ (Write)

کاری که می خواهیم انجام دهیم اینست که با بررسی با استفاده از کدهایی در قسمت بعدی، در صورت مثبت بودن جواب این سوالات، مقدار True و در صورت منفی بودن جواب این سوالات، مقدار false را به متغیر مربوطه بدهیم.

با استفاده از کلاس Environment می توان به حافظه ی خارجی دسترسی داشت.

پس یک متغیر رشته ای از یکی از متدهای این کلاس می سازم. و نامش را state به معنی وضعیت می گذارم.

String state = Environment.getExternalStorageState();

مشاهده می کنید که این متغیر یک نوع رشته از متد getExternalStorageState می باشد. که در واقع متد getExternalStorageState وضعیت حافظه ی خارجی را به ما اطلاع می دهد.

در قسمت بعدی با استفاده از یک ساختار کنترلی if-else به بررسی این موضوع می پردازم که آیا حافظه ی خارجی بر روی دستگاه، سوار (mount) شده است یا خیر؟

if (Environment.MEDIA_MOUNTED.equals(state)) {
            memoryExternalStorageAvailable = memoryExternalStorageWrite = true;
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            memoryExternalStorageAvailable = true;
            memoryExternalStorageWrite = false;
        } else {
            memoryExternalStorageAvailable = memoryExternalStorageWrite = false;
        }

در همین ساختار کنترلی است که مقدارهای دو متغیر Boolean ی که در ابتدا تعریف نمودیم، مشخص می شود.

در if دوم، با استفاده از MEDIA_MOUNTED_READ_ONLY به معنی آنست که اگر ، حافظه ی خارجی به صورت Read Only است، فقط متغیر memoryExternalStorageAvailable مقدار True را داشته باشد. که به معنی فقط خواندنی است.

برای این که این موضوع را به اطلاع کاربر برسانیم بهتر است از یک پیغام Toast استفاده کنیم.

پس دو رشته به نام های Readable و Writeable می سازم.

مقدار اولیه ی این دو رشته به ترتیب برابر Not Readable و Not Writable است. ولی اگر از دستور if با موفقیت عبور نمایند، مقدار Can Read Data From External Memory و Can Write Data into External Memory به آن ها داده می شود که این پیغام در آخر با استفاده از یک Toast به کاربر نمایش داده می شود.

String Readable = "Not Readable";
if(memoryExternalStorageAvailable)
    Readable="Can Read Data From External Memory";
String Writeable = "\nNot Writeable";
if(memoryExternalStorageWrite)
     Writeable="\nCan Write Data into External Memory";
Toast.makeText(getApplicationContext(), Readable+Writeable, Toast.LENGTH_SHORT).show();

کد کامل MainActivity.java

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        boolean memoryExternalStorageAvailable = false;
        boolean memoryExternalStorageWrite = false;
        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            memoryExternalStorageAvailable = memoryExternalStorageWrite = true;
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            memoryExternalStorageAvailable = true;
            memoryExternalStorageWrite = false;
        } else {
            memoryExternalStorageAvailable = memoryExternalStorageWrite = false;
        }
        String Readable = "Not Readable";
        if(memoryExternalStorageAvailable)
            Readable="Can Read Data From External Memory";
        String Writeable = "\nNot Writeable";
        if(memoryExternalStorageWrite)
            Writeable="\nCan Write Data into External Memory";
        Toast.makeText(getApplicationContext(), Readable+Writeable, Toast.LENGTH_SHORT).show();

    }
}

در برخی منابع، ذکر شده که برای دادن دسترسی ها به اپلیکیشن در صورت نیاز باید کدهای زیر برای دسترسی به حافظه ی خارجی در AndroidManifest.xml نوشته شوند.

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

پروژه را Run می کنیم.

Arash

طراح سایت و برنامه نویس

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا