MEA Influencer Community Platform

Sizleri MEA Influencer Community Program hakkında bilgilendirmek istiyorum.

MEA Influencer Windows 8 uygulaması sayesinde, Windows Azure, Windows Phone, Windows 8 konularında MEA bölgesinde (Ortadoğu ve Afrika) üretilen tüm blog yazılarına, webcast’lere ve uygulamalara kolaylıkla erişebilirsiniz.

MEA Influencer uygulamasını kullanarak takip etmek istediğiniz teknoloji ile ilgili üretilen tüm içeriklere tek bir yerden ulaşabilirsiniz.

Gelişmiş filtreleme özellikleri sayesinde, geçmiş veya gelecek webcast’leri, yayınlanmış uygulamaları ve makaleleri istediğiniz kategoriye göre filtreleyebilirsiniz.

Ayrıca paylaşımı yapana göre (MVP, MSP veya Influencer) veya paylaşımın diline göre (Türkçe, İngilizce veya Arapça) filtreleme yapabilirsiniz.

Kendi tercihlerinize göre filtrelerinizi varsayılan olarak kaydedebilirsiniz, böylece uygulamayı her kullandığınızda varsayılan tercihlerinize göre otomatik filtreleme yapılır.

Windows Phone 8 varsayılan harita uygulaması ile yol tarifi alma

Windows Phone 8 SDK ile birlikte gelen MapsDirectionsTask sınıfı sayesinde yol güzergahı hesaplatmak ve kullanıcıya göstermek çok kolaylaştı.

Start ve End özelliklerine uygun değerleri girerek iki nokta arasında yol tarifi alabilmek mümkün.

Bu özelliği denemek için ekrana bir buton ekleyelim;

<Button x:Name=”btnMap” Content=”Güzergah Hesapla” Height=”140” Width=”420” Click=”btnMap_Click” /></pre>

Eklediğimiz Button‘un Click event‘ine bağladığımız method‘u yazalım;

var task = new MapsDirectionsTask();

task.End = new LabeledMapLocation("Kadıköy Rıhtım", new GeoCoordinate(40.990, 29.025));

task.Show();


**MapsDirectionsTask** sınıfından yeni bir *instance* çıkartıp, **End** özelliğine LabeledMapLocation sınıfından bir değişken atıyoruz.

GeoCoordinate sınıfının *constructor*'ında varış noktasının koordinatlarını vermemiz gerekiyor, ben örnek olarak *40.990* ve *29.025* değerlerini verdim böylece *Kadıköy Rıhtım*'a nasıl gidileceğini buluyor olacağız;

![](/assets/uploads/2013/08/mapsdirectiontask-1.png)

**Start** özelliğine değer atamadığımız için *konum servisinden* bulunan konumumuz kullanılacak ve **End** özelliğine verdiğimiz konum'a giden *güzergah* hesaplanarak ekranda bir **harita** ve altında **liste** şeklide gösterilecek;

![](/assets/uploads/2013/08/mapsdirectiontask-2.png)

Windows Phone ShareLinkTask ile uygulamanın Marketplace adresini paylaşma

Windows Phone 8 için Share Task’larının kullanımı makalesinde ele aldığımız ShareLinkTask sınıfını kullanarak Windows Phone uygulamaları içerisinden link paylaşabiliyoruz;

var task = new ShareLinkTask(); task.Title = “Programcıdan Programcıya”; task.Message = “Engin Polat’ın Programcıdan Programcıya Blog’u”; task.LinkUri = new Uri(“http://www.enginpolat.com”, UriKind.Absolute); task.Show();</pre>

Kullanıcının telefonuna eklediği hesaplara bağlı olarak yukarıdaki kod parçası, Facebook, Twitter, LinkedIn, Outlook gibi platformlarda paylaşım yapabilir.

Peki uygulamamızın Windows Phone Marketplace‘deki sayfasını paylaşmak istiyorsak ne yapmalıyız?

Title ve Message özelliklerine uygun değerleri girmek kolay, işin karıştığı nokta LinkUri özelliğine girilecek değerde.

Örneğin, Programcıdan Programcıya uygulamasının linki, http://windowsphone.com/s?appid=20489228-9fe9-4bf9-b313-d81f31aa02ac

appid parametresine verilecek değer WMAppManifest.xml dosyası içerisindeki ProductID özelliğinden edinilmeli.

Fakat MSDN‘deki App manifest file for Windows Phone makalesinde ProductID için önemli bir bilgi veriliyor;

Orjinali; During the app submission process, a new product ID is inserted into the manifest file
Türkçesi; Uygulama gönderimi sırasında yeni product ID manifest dosyasında güncellenir

Yani biz uygulamayı geliştirirken WMAppManifest.xml dosyasında gördüğümüz ProductID uygulamayı Windows Phone MarketPlace‘e gönderirken değişecek.

Bu problemin üstesinden gelmek için çalışma zamanında WMAppManifest.xml dosyası içerisinden ProductID değerini okumalıyız. Bunun için aşağıda geliştirdiğim ManifestFileReader sınıfını kullanabiliriz;

public class ManifestFileReader
{
    public static string GetProductID()
    {
        var settings = new XmlReaderSettings { XmlResolver = new XmlXapResolver() };

        using (var reader = XmlReader.Create("WMAppManifest.xml", settings))
        {
            reader.ReadToDescendant("App");

            return reader.GetAttribute("ProductID");
        }
    }
}


Yukarıdaki kod parçasında öncelikle XmlReaderSettings sınıfından yeni bir değişken oluşturuyoruz ve XmlResolver özelliğine XmlXapResolver sınıfından yeni bir instance veriyoruz.

Ardından XmlReader sınıfının static Create() methodunu kullanarak *WMAppManifest.xml* dosyasını açıyoruz, ReadToDescendant() method'u ile *App* node'una gidip, GetAttribute() method'u ile **ProductID** değerini okuyoruz.

Bu sayede uygulamanın **ProductID** değerini okuyabilir ve paylaşmak için *http://windowsphone.com/s?appid={ProductID}* formatında link hazırlayabiliriz.

Windows Phone 8 SaveRingtoneTask ile melodi kaydetme

Windows Phone 8 için geliştirdiğiniz uygulamada, kullanıcıya telefonun çalma melodisi kaydetme özelliği vermek istiyorsunuz. Örneğin bir bankaya ait olacak uygulama geliştiriyorsunuz ve uygulamanın kullanıcısının telefonun çalma melodisi olarak bankanın reklam jingle‘ını seçebilmesini istiyorsunuz.

Windows Phone SDK ile gelen SaveRingtoneTask sınıfı sayesinde bunu başarabilirsiniz. SaveRingtoneTask sınıfının kullanımı oldukça basit, Windows Phone 8 için Share Task’larının kullanımı makalesinde bahsettiğim share task‘ların kullanımına çok benziyor;

var task = new SaveRingtoneTask(); task.Completed += delegate(object _sender, TaskEventArgs _e) { if(_e.TaskResult == TaskResult.OK) { MessageBox.Show(“Ringtone kaydedildi!..”); } }; task.Source = new Uri(“appdata:/cemilusta.wma”); task.DisplayName = “cemil usta akçaabat köftesi :)”; task.Show();

cemil usta akçaabat köftesi reklam jingle indir

Windows Phone ekrandaki formu temizleme

Windows Phone için geliştirdiğiniz uygulamaya bir form eklediniz ve çok fazla giriş kutusu var (TextBox, PasswordBox, CheckBox, vs.)

Ekleyeceğiniz Temizle butonu aracılığıyla ekrandaki tüm giriş kutularını temizlemek istiyorsunuz. Page şablonunun varsayılan halinde yeralan LayoutRoot isimli Grid üzerinden temizleme yapabilirsiniz;

foreach (var element in LayoutRoot.Children) { if (element is TextBox) { (element as TextBox).Text = “”; } }</pre>

Fakat tasarımına uymamasından dolayı LayoutRoot isimli Grid ekranda olmayabilir ve daha genel bir yöntemle tüm giriş kutularını temizlemek isteyebilirsiniz.

Aşağıdaki gibi bir kendini çağıran fonksiyon (recursive function) aracılığıyla bu işi yaptırabilirsiniz;

private void ClearTextbox(DependencyObject element)
{
    var elementChildCount = VisualTreeHelper.GetChildrenCount(element);

    if (elementChildCount > 0)
    {
        for (var iLoop = 0; iLoop < elementChildCount; iLoop++)
        {
            var innerElement = VisualTreeHelper.GetChild(element, iLoop);

            if (innerElement is TextBox)
            {
                (innerElement as TextBox).Text = "";
            }
            else
            {
                ClearTextbox(innerElement);
            }
        }
    }
}

VisualTreeHelper sınıfının static GetChildrenCount() methodu ile ilgili nesnenin içinde başka bir nesne olup olmadığını kontrol ediyoruz, eğer nesne başka nesne içeriyorsa, döngü aracılığı ile dönerek GetChild() methodu sayesinde her elemanı buluyoruz.

Bulduğumuz nesne eğer bir TextBox ise, basitçe Text özelliğini boşaltıyoruz, değilse fonksiyonu tekrar çağırıp elde ettiğimiz nesneyi veriyoruz. Böylece her nesnenin içerdiği elemanları teker teker bulup içeriklerini temizleyebiliyoruz.

Kullanmak için;

</pre><pre class="brush:csharp">private void TemizleButton_OnClick(object sender, RoutedEventArgs e) { ClearTextbox(this); }

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı