28 Aralık 2012 Cuma

Lumia 920 Kazanma Şansı


Hemen tıkla: http://nokia.ly/12EGaf7 4 Nokia Lumia 920'den birini kazanma şansını kaçırma!

Sanal telefonu kullanarak, özellikleri keşfet ve topladığın rakamlarla gizli şifreyi bularak çekilişe katıl.

10 Aralık 2012 Pazartesi

Windows Phone 8: Canlı Kutucukların Etkili Kullanımı

Canlı Kutucuk (Live Tile) Kavramı
Windows Store ve Windows Phone başlangıç ekranlarında görmeye alışık olduğumuz kutucuklar, sıradan birer simge olmanın ötesinde özellikler taşıyor. Bunlara Canlı Kutucuklar (Live Tiles) denmesinin sebebi, üzerlerinde aktif olarak güncellenen veriler barındırmasıdır.

Başlangıç ekranındaki canlı kutucuklar, uygulamalara hayat verir ve uygulama çalışır durumda değilken bile en güncel bilgileri gösterir. Canlı kutucuklar, gerçek zamanlı olarak değişip güncellenir, böylece kullanıcıların önem verdiği konularda her an güncel kalması sağlanır.

Canlı Kutucuklara Programatik Erişim
Şimdi, vakit kaybetmeden, Windows Phone 8 üzerinde Canlı Kutucuklara nasıl erişebileceğimizi ele alan örnek bir proje geliştirelim. İlk adım olarak LiveTileKullanimi isimli bir Windows Phone projesi oluşturalım.


Hedef platform olarak Windows Phone 8.0 seçelim ve ilerleyelim.


Proje oluşturulduktan sonra, Solution Explorer penceresinde yer alan Properties bölümünün altında bulunan WMAppManifest.xml dosyasına çift tıklayarak açalım.


WMAppManifest standart bir xml dosyasıdır. Visual Studio 2012 bu dosya için bir editör ekranı sunar ve daha kolay bir biçimde düzenleme yapmamıza imkan verir. Bu dosyayı açtığımızda, aşağıdaki görselde olduğu gibi Application UI sekmesini görürüz.

 
Bu ekranda App Icon bölümünde uygulamaya ait simgeyi tanımlayabileceğimiz gibi, ek olarak uygulamamızın başlangıç ekranına sabitlenmesi sırasında kullanılacak olan görselleri de Tile Images bölümünden tanımlayabiliyoruz. Başlangıç ekranı için 3 farklı boyutta görsel kullanabiliriz. Küçük (Small), Orta (Medium) ve Geniş (Large). Geniş kutucuk için bir görsel tanımlamak zorunda değiliz ama Küçük ve Orta boyutlu kutucuklar için bir görsel tanımlamak zorunlu.


Geniş kutucuk için de görsel tanımlamak istiyorsak, Support for large Tiles seçeneğini işaretlememiz gerekiyor. Kutucuk şablonu olarak TemplateFlip seçtiğimizde, kutucuklar üzerinde kullanılacak görsellerin uygun boyutlarını aşağıda bulabilirsiniz.

Small Tile: 159x159
Medium Tile: 336x336
Large Tile: 691x336

TemplateFlip yerine TemplateIconic ya da TemplateCycle şablonları da tercih edilebilir. Tercihinizi Tile Template bölümünde belirtebilirsiniz.


TemplateIconic için Small (71x110) ve de Medium (134x202) boyutta görseller kullanmak zorunlu iken, TemplateCycle tarafında dönüşümlü olarak gösterilmek üzere bir Small bir de ek olmak üzere toplam 2 görsel kullanmak zorunludur. Fakat tercihe bağlı olarak bir Small, 9 adet de ek görsel kullanılarak daha haraketli bir kutucuk tasarlanabilir. Bu üç şablondan istediğimizi tercih edebiliriz.


Bu makalemizde, örneğimizi TemplateIconic şablonunu kullanarak gerçekleştireceğiz. İlgili ekranı tasarlayıp, kodlarımızı yazmaya başlayalım.


TemplateIconic şablonunu kullanarak kutucuklar üzerinde sunabileceğimiz ve güncelleyebileceğimiz bilgiler;
Başlık (Title), Adet (Count), Üç satırlık metinsel ifade (WideContent1-2-3), Küçük Simge Görseli (SmallIconImage), Orta ya da Geniş Boy Simge Görseli (IconImage), Arkaplan Rengi (BackgroundColor) bilgileridir.

Bu bilgileri güncelleyebilmek için öncelikle kutucuk (Tile) referansını yakalamak gerekiyor. Sonrasında ilgili özellikler üzerine değer atamaları yapılabilir. Örnek kod bloğunu aşağıda bulabilirsiniz.

        private void KutucukGuncelle()
        {
            ShellTile anaKutucuk = ShellTile.ActiveTiles.FirstOrDefault();
            if (anaKutucuk != null)
            {
                IconicTileData veriler = new IconicTileData();
                veriler.Count = 10;
                veriler.Title = "Güncel Başlık";
                veriler.WideContent1 = "ilk satırdaki yazılar";
                veriler.WideContent2 = "ikinci satırdaki yazılar";
                veriler.WideContent3 = "üçüncü satırdaki yazılar";
                anaKutucuk.Update(veriler);
            }
        }

Küçük kutucuk üzerinde sadece simge ve sayısal bilgi barındırılabilirken, orta boy kutucuk bu iki bilgiye ek olarak bir de başlık bilgisi kullanmamıza imkan sağlıyor. Geniş boyuttaki kutucuğun üzerinde de diğer verilere ek olarak üç satırlık metinsel veri sunabiliyoruz.




BackgroundTask Kullanarak Canlı Kutucukların Periyodik Olarak Güncellenmesi
Arkaplanda düzenli bir güncelleme yapabilmek için, ScheduledTaskAgent proje şablonundan faydalanacağız. Bu amaçla Solution üzerine sağ tıklayıp, Add New Project seçeneği ile bir Windows Phone Scheduled TaskAgent projesi ekleyelim.


Yine Windows Phone SDK 8.0 hedefli olarak bu projeyi oluşturduğumuzu belirtelim ve sonrasında ilk oluşturmuş olduğumuz LiveTileKullanimi isimli projenin referanslarına gidip, yeni projemizi referanslar arasına ekleyelim.




Yeni projemizin referansını, ilk projemiz olan LiveTileKullanimi projesine ekledikten sonra, ScheduledTaskAgent1 projemiz içerisinde yer alan ScheduledAgent.cs dosyasına çift tıklayalım ve kod sayfamızı açalım.

Öncelikle, System, System.Linq ve Microsoft.Phone.Shell isimalanını using direktiflerimiz arasına ekleyelim. Sonrasında, OnInvoke metodunu aşağıdaki gibi kodlayalım.

        protected override void OnInvoke(ScheduledTask task)
        {
            //TODO: Add code to perform your task in background
            ShellTile kutucuk = ShellTile.ActiveTiles.FirstOrDefault();
            if (kutucuk != null)
            {
                int x = DateTime.Now.Second; // Örnek değer olarak sistem saatinin saniye hanesini kullanacağız.
                IconicTileData veriler = new IconicTileData();
                veriler.Count = x;
                veriler.Title = String.Format("Güncel {0} Başlık",x);
                veriler.WideContent1 = "ilk satırdaki yazılar" + x;
                veriler.WideContent2 = "ikinci satırdaki yazılar" + x;
                veriler.WideContent3 = "üçüncü satırdaki yazılar" + x;
                kutucuk.Update(veriler);
            }
            NotifyComplete();
        }

OnInvoke metodunu bu şekilde kodladığımızda, ScheduledTask her tetiklendiğinde yapılacak iş tanımlanmış oldu. Şimdi, bu işi uygulamamız içerisinde nasıl periyodik olarak tetikleyeceğimizi kodlayalım.

İlk olarak, LiveTileKullanimi projemize geçelim ve Microsoft.Phone.Scheduler isimalanını kod sayfamıza ekleyelim. Sonrasında da aşağıdaki metodu projemiz içerisine ekleyelim.

        private void PeriyodikGuncelle()
        {
            if (ScheduledActionService.Find("CanliKutucuk") != null) // Eğer bu isimde bir servis var ise daha sonra tekrar eklemek üzere kaldırıyoruz.
            {
                ScheduledActionService.Remove("CanliKutucuk");
            }
            PeriodicTask pt = new PeriodicTask("CanliKutucuk");
            pt.Description = "LiveTileKullanimi Uygulamasının Canlı Kutucuk Güncelleyicisi";
            pt.ExpirationTime = DateTime.Now.AddHours(1);
            ScheduledActionService.Add(pt);
            ScheduledActionService.LaunchForTest("CanliKutucuk",TimeSpan.FromSeconds(8));
        }

Bu metodu uygun bir yerde çalıştırarak, arkaplanda CanliKutucuk isminde bir PeriodicTask, Schedule edilmemiş ise oluşturulup çalıştırılmasını sağlayabilirsiniz. Bu kod tekrar çalıştığında böyle bir servis tanımlı ise servisi kaldırıp tekrar ekleyecek ve herhangi bir sorun yaşanmadan kodların çalışabilmesi sağlanmış olacaktır.

Ek Kaynak
Bu konuda daha detaylı Türkçe bilgiyi ilerleyen yazılarımda paylaşacağım. Beklemek istemiyorum, İngilizce kaynak da işimi görür daha detaylı bilgiye ihtiyacım var diyorsanız, aşağıdaki videodan faydalanabilirsiniz.


6 Aralık 2012 Perşembe

Windows Phone üzerinde ListPicker Kullanımı

WinForms üzerindeki ComboBox ve ASP.NET kontrollerinden DropDownList'e benzetebileceğimiz bir kontrol olan ListPicker, Windows Phone üzerinde benzer ihtiyaçları karşılamamızı sağlıyor.

Bu kontrolü projelerimizde kullanabilmek için öncelikle Silverlight Toolkit kurulumu yapmalıyız. Aşağıdaki linkleri kullanarak sisteminiz için uygun olan sürümü indirebilirsiniz.
Windows Phone Toolkit - Nov 2011 (7.1 SDK): http://silverlight.codeplex.com/releases/view/75888
Windows Phone Toolkit - September 2012: http://silverlight.codeplex.com/releases/view/94435

 
Silverlight for Windows Phone Toolkit kurulumunun ardından yeni bir Windows Phone projesi oluşturalım ve proje adı olarak ListPickerKullanimi adını verelim.

Proje oluştuktan sonra, referanslar arasına Microsoft.Phone.Controls.Toolkit.dll bileşenini ekleyelim.


Tasarım ekranına birer ListPicker, Button ve TextBlock kontrolü sürükleyip bırakalım.


Şimdi kodları yazalım. ListPicker kontrolünün ItemsSource özelliğine içeride görüntülenmesini istediğimiz listeyi atayalım. Butona tıklandığında da seçili olan üyeyi TextBlock üzerinde görüntüleyeceğiz.

Uygulamayı çalıştırıp, ListPicker kontrolü üzerine dokunduğunuzda aşağıdaki gibi bir görünümle karşılaşacaksınız.

Windows Phone 8 üzerinde AdControl Kullanımı

try
{
  // ilk ifade ApplicationID, ikincisi AdUnitID ve üçüncüsü isAutoRefreshEnabled değeri
  adControl1 = new AdControl("test_client", "Image480_80", true);
}
catch
{
}

if (adControl1 != null)
{
  adControl1.Width = 480;
  adControl1.Height = 80;
  adControl1.VerticalAlignment = VerticalAlignment.Bottom;
  adControl1.HorizontalAlignment = HorizontalAlignment.Center;

  Grid grid = (Grid)this.LayoutRoot.Children[1];
  grid.Children.Add(adControlFSA);
}
Windows Phone 8 projesi oluşturduk. Kodlarımızı normal bir şekilde yazdık, uygulamayı çalıştırdık, herhangi bir hata yok fakat görünürde AdControl de yok. Aynı işi Visual Studio 2010 ile Windows Phone 7.1 hedefleyerek yaptığımızda herşey yolunda. Peki SDK 7.1'den 8.0'a ne değişti? Cevap; Capabilities

Windows Phone 8 uygulamaları üzerinde AdControl kullanabilmek için minimum ihtiyaç aşağıdaki gibidir.


Siz de bu problemi yaşıyorsanız, bakmanız gereken yer Capabilities.

4 Aralık 2012 Salı

Windows Phone Emulatörde Bilgisayar Klavyesini Kullanın

image
Windows Phone Emulatör ile çalışıyorsanız farketmişsinizdir ki kullanıcı tarafından gerçekleştirilecek veri girişi için, telefon üzerindeki soft klavye kullanılıyor. Bu işlem için bilgisayarın klavyesini kullanamıyoruz ve görünürde klavyeyi aktif etmek için bir ayar da bulunmuyor. Fakat, giriş yapmanızı gerektiren bir alana konumlandıktan sonra, klavyeden PageUp tuşuna basarak klavyeyi aktifleştirebilirsiniz. PageUp tuşuna bastığınızda ekrandaki soft klavye kapanacak ve artık cihaz üzerindeki fiziksel klavyeyi kullanabilirsiniz.