Windows Phones 7 serisi ile Merhaba

Visual Studio 2010 Express for Windows Phones IDE’si ile windows phones isimli yeni teknoloji için geliştirmeye merhaba dedik. Bu yazımda bu teknolojiyi incelerken geliştirme aracını ve yeniliklerden bahsedeceğim. Öncelikle windows mobil 5.0 dan beri telefonlarımıza yeni ROM yüklemeye alışmıştık. Bu aşamadan sonra ise Windows Mobile 6.5 telefonlarımıza dahi yeni işletim sistemini ROM güncellemesi ile yükleyemeyeceğiz. Donanımsal olarak cihazların yeterli teknolojiye sahip olmamasını sayabiliriz. Bunun dışında Multitouch özellipi ve kapasitif ekran özelliklerinin gelmesi aynı zamanda cihazın kullanım özelliklerine uygun olarak 3 tuşun bulunması gerekiyor. Bu özellikler dahi bende büyük heyecan uyandırmaya yetti. Windows Phones ile tüm yazılım geliştirme altyapısı Silverlight üzerine inşa edilmiş gibi gözüküyor bunun yanında XNA önemli bir yer tutmakta. Önceki versiyonlarda XNA desteği yerine DirectX programlama ile uğraşmak zorundaydık artık işlerimiz biraz daha kolay. Yinede yeni platforma alışmak yazılım geliştiriciler açısından biraz tedirginlik yaratabilir. Klasik windows mobile programlama alışkanlıklarımızı bir kenara bırakmak zorundayız. Öncelikle bildiğim temellerden biri Bluetooth API’sinin değişiklik göstereceğiydi. Diğer API’lerle ilgili durum şu anda bilgim dahilinde değil. Visual Studio 2010 ile beraber gelen Mobil Proje tiplerini inceleyecek olursak karşımıza şu tipler çıkmakta;   İki seçeneğimizden ilki Silverlight for Windows Phone seçeneği. Burada Windows Phone Application seçeneği ile temel template’imiz karşımıza çıkmakta. Genel ve gelişmiş tüm programlarımızı bu yapı altında yapabilmekteyiz. Windows Phone List Application’da ise isminden anlaşılabileceği gibi listelerden oluşmuş uygulamalar yapabilmekteyiz. Class Library klasik alışkanlığımız olan kendi sınıflarımız için bir seçenek.   XNA Game Studio 4.0 ise Windows Phone Game, Game Livrary, Windows Game ,Xbox 360 gibi seçeneklerle beraber gelmekte. Bizim ilk uygulamamız Silverlight tabanıyla windows phone application olacak. Karşımıza çıkan standart görüntünün aksine ilk incelediğim yer toolbox kısmı oldu. İhtiyacıma uygun araçları görmek oldukça sevindiriciydi. Bunların ise görsellik olarak standart windows kontrollerinden daha fazla tatmin edici olması işin sevindirici bir boyutu. Baktığınız zaman eski nesil cihazlarda windows formları ile benzerlik üst düzeydeydi. Hatta normal debug ettiğiniz bir uygulamanın penceresini windows üzerinden bile açabilmeniz için gerekli yöntemler mevcuttu. Düşündüğüm zaman WPF’i port etmeleri çok zorlu bir iş olurdu. Görsel olarak port edilebilecek bir uygulama olması açısında Silverlight’ın doğru bir seçim olduğuda düşünülebilir. Tabiki bildiğimiz anlamıyla başlı başına bir silverlight değil. Bir browser’a ihtiyacınız yok. Donanım tabanlı bir silverlight klonu karşınızda diyebilirim. İlk işim açılan pencere ile beraber gelen gri tonlardan kurtulmak için çareler aramaktı. Baktığınız zaman ilk penceremizin gridlere ayrıldığını ve alttaki yapının contentgrid olduğunu gördüm. Rengi değiştirmek için background özelliğini kolayca buldum. Artık sıkıcı temel renklerden oluşan bir palet yoktu karşımda daha gelişmiş Red Green Blue değerlerini bile ayarlayabileceğim bir paletle karşılaştım.   Üstteki bölüm ise TitleGrid idi. Bundaki renkleride aynı metodla değiştirirken. TextBlocklarınıda ilk uygulamaya uygun bir isimle değiştirdim.   Hemen toolbox’umdan bir buton sürükledim. X ve Y koordinatından hizalama seçeneği mobil cihazda uygulama geliştirirken oldukça hoş bir özellik. Bu işlemleri yaparken Iphone’un eğlenceye yönelik piyasasınında sarsılacağı öngürüsünü oluşturmak zor değil. Profosyonel uygulamalarda ise Windows Mobile serisis zaten office uygulamaları ile tartışılmaz öncüydü.   Buton’a çift tıkladığımda klasik C# kod ekranım karşımdaydı. Kendimi tanıdık bir ekranda bulmak ise bu kadar görselliğin yanında oldukça büyük bir artı. Bu arada pencereme bir textbox’da sürükledim. Buton’un click event’ine her ilk yeni uygulamalarda olduğu gibi bir atama ile tamamladım.   NameSpace’lere bakmadan tabi olmaz. Yeni namespace’ler karşımda ve karıştırılacak çok şey olduğu gözükmekte. Debug->Start without Debugging ile emülatörümü çalıştırmak üzere heyecanla tıkladım. İlk uygulamamın ekran görüntüsü;   Gerçekten heyecan verici olduğu muhakkak. Fakat Windows mobile konusunda deneyiminiz varsa yeni platformda da zorluk çekeceğinizi zannetmiyorum. Kesinlikle eğlenceli zaman geçirerek adapte olabilirsiniz.  

Windows Phone 7 için Yazılım Geliştirmek

  Yeni nesil Windows Phone’lar daha piyasaya çıkmadı fakat geliştirme araçları şimdiden sunuldu bile. Öncelikle geliştirme araçlarını nasıl edinebilirsiniz ondan bahsetmek istiyorum. Cihazların tümümün ismi Windows Phone 7 olarak geçmekte. Geliştirme aracıda bu sloganı kullanarak Visual Studio 2010 for Windows Phones ismi altında sunulmuş bulunmakta. Değişenler ise XNA ve Silverlight’ın yeni cihazlarla yoğun kullanıma gireceği. Artık Silverlight web tabanlı olmaktan çıkarılmış ve cihaz tabanlı bir özellik haline geçirilmiş bulunuyor.   Windows Phone Developers CTP’yi indirmek için http://tinyurl.com/y8gvwp2 Linkini kullanabilirsiniz. Bilgisayarınıza dosyayı indirdikten sonra. Kurulum aşaması yukarıdaki gibidir. Fazla uzun sürmeyen bir kurulum aşaması sürüyor. Visual Studio 2010 Express for Windows Phone edition kurulduktan sonra çalıştırma esnasındaki ekran görüntüsü yukarıdaki gibi. Yeni nesil windows phone 7 cihazların emülatörün ekran görüntüsü ise aşağıdaki gibi gözükmekte. Windows Phone 7 ile ayrıntılı geliştirmelere yakında blog'umdan ve www.developermania.net adresinden yer vereceğim. B u müthiş ve heyecan verici teknolojiyi incelemek benim için olduça büyük bir zevk olacak.

TODAY veya HOME Ekranını uygulamada göstermek!

Mobil uygulamanızdan today ekranına veya ilk home ekranını göstermek yani dönmek için iki adımlı basit bir kod parçamız bulunmakta.   HWND hWndDesktop = GetDesktopWindow();SetForegroundWindow((HWND)(((ULONG) hWndDesktop) | 0x01) );   İlk satırda today veya başlangıç ekranımızın HWND tipinde adresini alıyoruz. En üstte duracak pencere olmasını sağlamak içinde setforegroundwindow metodunu uyguluyoruz. Artık Today ekranındasınız. Uygulama kodları native düzeydedir.  

Uygulama Minimize Edildiğinde Nasıl Kapatırım?

  Windows Mobile işletim sistemi kullanan cihazlardaki en popüler sorudur. Çünkü uygulama minimize edilse dahi sistem kaynakkklarını kullanmaya devam etmektedir. Arka planda çalışan programı şahsım adına unuttuğum dahi olabilmekte. Sistem kaynaklarını kullanması bir kenara bu işlem yüzünden pilimin kullanım süreside düşmekte. En azından kendi uygulamlarınızda bu işlemi uygulayarak kullanıcıları büyük bir dertten kurtarabilirsiniz. Bunun için biraz alt seviyeli programlamaya inmemiz ve pencere mesajlaşma fonksiyonlaraına ve parametrelerin göz atmamız gerekmekte. Program minimize butonuna basıldığında SIZE_MINIMIZED sabiti ile WM_SIZE mesajını almaktadır bu da wParam içinde gelmektedir. Bizim yapmamız gereken ise bu mesaj geldiğinde PostMessage(WM_CLOSE) metodunu tetiklemektir. Bunun için aşağıdaki kod parçası işinizi görecektir. Zamanında biraz Windows API’lerle uğraşmış yazılım geliştiriciler için oldukça aşina geleceğini tahmin etmekteyim. Uygulama kodları Native düzeydedir.   LRESULT CCloseOnMinFrame::OnSize(UINT /*uMsg*/,                                  WPARAM wParam,                                  LPARAM /*lParam*/,                                  BOOL& bHandled){    if(wParam == SIZE_MINIMIZED)    {        PostMessage(WM_CLOSE);        bHandled = TRUE;        return 0;    }    // Not handled here    bHandled = FALSE;    return 1;}   Kaynak: MVP João Paulo Figueira

Windwos Mobile 7 Tanıtılıyor!

Artık IE 7, Silverlight uygulaması ve daha fazlası Windows Mobile 7 üstünde. 15 Ağustosta yapılan Barcelo’daki Dünya Mobil kongresinde Windows Mobile 7 tanıtılıyor.Windows Mobile 7 prototipler sanal klavye ve yeni giriş metodları ile birlikte geliyor. Artık kalemlere zorunluluk kalkacak. Yeni video çözümleyiciside windows mobile ile gelecek özellikler arasında. Diğerleri ise şöyle sıralanabilir; Windows Mobile 7 için Internet Explorer Mobil 7   Qualcomm DirectShow tabanı bileşenler. Openmac ve Directshow temeli için geliştirme çözümleride içermekte Cihazların 1GHz seviyesinde işlemci barındırması bekleniyor. Bende heyecanla bekliyorum.   WİNDOWS MOBILE 7 TODAY Ekrenının ilk görüntüsü:

Mobil Cihaz ve Depolama kartında Kullanılabilir Hafıza Miktarı

  Mobil cihazımızdaki depolama kartı ve cihazın dahili hafızasındaki kullanılabilir bellek miktarını öğreneceğiz. Bunun için DLL Import yöntemi ile bir dll'i import edip bu değerleri elde etmek için bir fonksiyon kullanacağız. Import edeceğimiz DLL'in ismi "coredll.dll" kullanacağımız metod ise GetDiskFreeSpaceEx metodu olacak. Bu sayede cihazın toplam bellek miktarına ve kullanılabilir bellek miktarına erişebileceğiz. Bazen yaptığım uygulamaları tek başına ele aldığınızı tahmin etmekteyim en azından deneyimli olmayan yazılım geliştiriciler bu programın bana salt olarak ne avantajı olabilir diye düşünmekte. Onun için bazı yazılarımda ufkunuzu genişletecek bir iki ipucu vererek konuya daha değerli olduğunu bilerek bakmanızı istemekteyim. Bir cihazdaki kullanılabilir belleğin ne durumda olduğunu belirlemek o an için yazdığınız mobil uygulamanın belleği en performanslı ve optimum kullanımı sağlamanıza yarayacaktır. Kullanıcıya uygulamanın yarısında bellek yetersiz mesajı vermeniz belleği verimli şekilde kullanamadığınızın göstergesidir. Eski C/C++ geliştiricileri belleğin ne kadar önemli olduğunu bilmektedirler. Büyük uygulamalarda göreceli olarak az bellek içeren mobil cihazlarda da bu durum geçerlidir. Bu DLL'i projemizde kullanmak için aşağıdaki namespace'i projemize eklememiz gerekmektedir; using System.Runtime.InteropServices; Bu işlemi yapmak içinde Nesne Yönelimli Programlamanın bize vermiş olduğu en büyük avantajlardan biri olan bir sınıf oluşturmamız gerekecek. Aşağıdaki sınıf bu kontrolü yapmanız için gereklidir; publicclassMemStatus { [DllImport("coredll.dll")] publicstaticexternbool GetDiskFreeSpaceEx( string lpDirectoryName, outulong lpFreeBytesAvailableToCaller, outulong lpTotalNumberOfBytes, outulong lpTotalNumberOfFreeBytes); publicconststring STORAGE_INTERNAL = "\\"; publicconststring STORAGE_FLASH_CARD = "\\storage card\\";public MemStatus() { } publicstaticbool GetStorageInfo( string storagePath, outulong totalBytes,outulong availBytes) { ulong freeBytesAvail; ulong totalBytesAvail; ulong freeBytesTotal; bool result = GetDiskFreeSpaceEx (storagePath, out freeBytesAvail, out totalBytesAvail, out freeBytesTotal); if (result == true) { totalBytes = totalBytesAvail; availBytes = freeBytesAvail; } else { totalBytes = ulong.MaxValue;availBytes = ulong.MaxValue; } return result; } } Sınıfımızı oluşturduktan sonra aşağıdakine benzer bir kullanıcı arayüzü tanımlayalım; Yazdığımız sınıfı formumuzun içinde kullanmak içinde aşağıdaki kodu kullanalım; publicpartialclassForm1 : Form { public Form1() { InitializeComponent(); } privatevoid menuItem1_Click(object sender, EventArgs e) { ulong totalBytes; ulong availBytes; if (MemStatus.GetStorageInfo( MemStatus.STORAGE_INTERNAL, out totalBytes,out availBytes)) { textBox1.Text = totalBytes.ToString(); textBox2.Text = availBytes.ToString(); } else { textBox1.Text = "?";textBox2.Text = "?"; } } } Butona bastığımızda ise çıktımız aşağıdaki gibi olacaktır; Bu sayede dahili belleği görebildik Storage Kartın Path yolu ve mobil cihazın dahili belleğine nasıl bakacağımız koddaki gibi pathlerde gösterilmiştir. Yazan: Volkan Atasever Kaynaklar: http://www.dotnetfordevices.com