10 Kasım 2017 Cuma

Environment Sınıfı

Giriş
Bu sınıf C#'taki Environment sınıfına benziyor. Özel dizinlerin yolunu almamızı sağlıyor.

DIRECTORY_DCIM Alanı
Şöyle yaparız. Çıktı olarak şuna benzer bir şey verir. /storage/extSdCard/DCIM
Environment.DIRECTORY_DCIM
DIRECTORY_PICTURES Alanı
Şöyle yaparız.
Environment.DIRECTORY_PICTURES
MEDIA_MOUNTED Alanı
getExternalStorageState() metodunun çıktısını karşılaştırmak için kullanılır. Şöyle yaparız.
Environment.MEDIA_MOUNTED
getDataDirectory metodu
File tipinden bir sonuç döndürür. Şöyle yaparız.
File data = Environment.getDataDirectory();
getExternalStorageDirectory metodu
File tipinden bir sonuç döndürür. Şöyle yaparız.
File sd = Environment.getExternalStorageDirectory();
SD Kart'ın yolunu verir. Şuna benzer bir çıktı alırız. /storage/extSdCard
Bu metodu çağırmadan önce SD Kart'ın mount edildiğinden emin olmak gerekir. Bunun için

1. getExternalStorageState () metodu kullanılır.
2. Mount edildiğini anladıktan sonra File.canWrite ile yazabildiğimizi kontrol ederiz. Şöyle yaparız.
if (sd.canWrite()) {...}
Örnek
SD Kart'ta bir dizin oluşturmak için şöyle yaparız.
String dirName="Test";
File file = new File(Environment.getExternalStorageDirectory(), dirName);
boolean status = file.mkdir();
Örnek
Şu da kullanılan bir yöntem ama bence getPath() ile dizin birleştirme yerine File (parent,child) şeklinde kullanmak daha okunaklı.
File f = new File(Environment.getExternalStorageDirectory().getPath()
            + "/MyApp/Images/");
Örnek
Şöyle yaparız.
File sdcard = Environment.getExternalStorageDirectory();
File dir = new File(sdcard.getAbsolutePath() + “/your-dir-name/”);
// create this directory if not already created
dir.mkdir();
// create the file in which we will write the contents
File file = new File(dir, My-File-Name.txt”);
FileOutputStream os = outStream = new FileOutputStream(file);
String data = This is the content of my file”;
os.write(data.getBytes());
os.close();
Örnek
En kötü yöntem ise SD Kart'ın yolu direkt (hard coded string) kodlamak
OutputStream output = new FileOutputStream("/sdcard/.temp");
getExternalStorageState metodu
Şöyle kullanırız. Sadece mount edildiğini gösterir. Okuma veya yazma hakkını göstermez.
public boolean isExternalStorageWritable() {
  String state = Environment.getExternalStorageState();
  if (Environment.MEDIA_MOUNTED.equals(state)) {
    return true;
  }
  return false;
}
İzinler
SD kartına okuma ve yazma için uygulamanın şu izinlere sahip olması gerekir.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />





Hiç yorum yok:

Yorum Gönder