25 Haziran 2014 Çarşamba

Delphi Android harici ve dahili hafıza kullanımı

Merhabalar,

Bir özelliğimden bahsetmek isterim hazır delphinin hazır fonksiyonları yerine "ilkel" de olsa kendi fonksiyonlarımla işlem yapmaya bayılırım :)

Bu yazımda sizlere Android cihazınızın "Hafıza Kartlarına" nasıl erişebileceğiniz hakkında örneklerle ve kendi buldugum Samsung ve LG cihazlarda denediğimde olumlu sonuç aldığım örneği anlatacağım. Bu kartlar cihazınızda mevcut ise  Harici ve Dahili hafıza kartı olmak üzere ikiye ayrılır.

İlk olarak Root dizinine erişmekle başlayalım. Root dizinindeki Storage "LG ve bazı cihazlarda adı MNT olabilir"

İlk Ekran Görüntüsü:


//Eklenmesi gereken USES : StrUtils
function GetRoot: String;
  function KacTane(Seperator,Str: String):Integer;
  begin
    Result := 0;
    while Pos(Seperator,Str) >0 do
    begin
      System.Delete(str,1,Pos(Seperator,str) );
      Inc(Result);
    end;
  end;
var
  Tmp: String;
begin
  Tmp := AnsiReverseString(TPath.GetSharedMusicPath);

  while KacTane('/',Tmp) > 1 do
  begin
    System.Delete(Tmp,1,Pos('/',Tmp) );
  end;
  Tmp := AnsiReverseString(Tmp);
  Result := Tmp + '/';
end;

Root dizinimizi bulduğumuza göre artık root dizinimizdeki klasörlerden sadece hafıza kartlarımızı
Listboxumuza eklemek kaldı. Bu olay içinde yine kendi hazırladığım procedure'e geçelim tekrar belirteyim ilkel olabilir tercih meselesi.

procedure HafizaListesi(Combo:TComboBox);
var
  FileList: TStringDynArray;
  s: string;
begin
    Combo.Items.Clear;
    FileList := TDirectory.GetDirectories(GetRoot);
    for s in FileList do
      if Pos('sd',LowerCase(s)) > 0 then
        Combo.items.Add(s);
end;

Şimdi sıra geldi yazdığımız kodların açıklamalarına:

TStringDynArray bildiğimiz Array of String yazılışının hızlı yazmak için kullanıldığı şeklidir aralarında hiçbir fark yoktur yani;
FileList değişkenimize TDirectory.GetDirectories("Klasör Dizini") fonksiyonu ile klasör dizinini belirtip içerisine Dizi elemanı olarak atayacağız. Bu işlemi "GetRoot" yani benim hazırlamış olduğum fonksiyon ile manuel olarak Root dizinini bulmuştuk ve tam olarak dizinin String karşılığını döndürmüştük.

Sıradaki işlemimiz içerisine Dizinler atanan FileList değişkenimizin içerisindekilerden sadece işimize yarayacak olanları almak.

Ben basit bir mantıkla araştırdığımda artık kendi baktığım cihazlarda diyim; Harici ve Dahili kartların hepsinin klasör isimelrinin içerisinde "sd" söz dilimi geçmektedir ve onların haricinde hiç gözüme çarpan olmadığı için sadece bir if sorgusu ile içerisinde "sd" geçenleri alabiliriz. Aldığımız dizi elemanlarınıda listboxa yazdırıyoruz.

Örnek Resim:
İşlemlerimiz bu kadardır. Buradan yola çıkarak kafanızda dosyalar ile ilgili birçok şeyin yapılabileceği belirebilir. Örneğin sadece Harici kartın yolunu öğrenmek istiyorsunuz if sorgusundaki "sd" yerine "ext" yazın Harici kartın yolunu getirecektir ve "ext" söz dilimi bütün harici kartlarda vardır.

Sürçü lisan olduysa affola.

2 yorum: