Windows Phone 8 | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Windows Phone 8 kategorisi için arşiv

Windows Phone 8 uygulamasında Accelerometer sensöründen veri okuma

29 January 2015 Yorum yapılmamış

Windows Phone cihazlar, cihazın hareketyönivme gibi çeşitli bilgilerini yazılımsal olarak algılamamıza yardım eden algılayıcılar (sensör) ile birlikte geliyorlar.

Accelerometer sensörü cihazın X, Y, Z eksenlerindeki ivme bilgisini algılar ve işletim sistemi aracılığıyla yazılıma iletebilir.

Öncelikle projenin References kısmında Microsoft.Devices.Sensors referansının olduğunu kontrol edelim ve sınıfın using kısmına Microsoft.Devices.Sensors namespace‘ini ekleyelim;

using Microsoft.Devices.Sensors;

Accelerometer sensörüne erişebilmek ve verisini okuyabilmek için Accelerometer sınıfından yeni bir instance oluşturmalıyız, bunun için static olan GetDefault() methodunu kullanabiliriz;

var _accelerometer = Accelerometer.GetDefault();

Sensör verisini bir defa okumak için _accelerometer değişkeninin GetCurrentReading() methodunu kullanıyoruz. Methoddan geri dönen AccelerometerReading tipindeki cevabın içerisindeki AccelerationX, AccelerationY, AccelerationZ property‘leri sayesinde ivme bilgisini elde edebiliriz;

var reading = _accelerometer.GetCurrentReading();
if (reading != null)
{
	var x = string.Format("{0,5:0.00}", reading.AccelerationX);
	var y = string.Format("{0,5:0.00}", reading.AccelerationY);
	var z = string.Format("{0,5:0.00}", reading.AccelerationZ);
}

Eğer ivme bilgisini sürekli okumamız gerekiyorsa _accelerometer değişkeninin ReadingChanged event’ini kullanabiliriz, Start() method’unu çağırmayı unutmamamız lazım;

_accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(AccelerometerReadingChanged);

_accelerometer.Start();
public void AccelerometerReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
	var x = string.Format("{0,5:0.00}", e.X);
	var y = string.Format("{0,5:0.00}", e.Y);
	var z = string.Format("{0,5:0.00}", e.Z);
}

Accelerometer verisine ihtiyacımız kalmadığında _accelerometer değişkeninin Stop() method’unu çağırmalıyız;

_accelerometer.Stop();

X, Y, Z eksenlerindeki değerler -2 ile +2 aralığında değişiyorlar. Yerçekimsiz ortamda değerlerin 0 olması bekleniyor. Eğer telefonu masa üzerine bırakırsak X ve Y değerleri 0, Z değeri -1 olarak okunmalı.

Start() methodu çağırıldıktan sonra yaklaşık olarak 50Hz hızında yani saniyede yaklaşık 50 defa ReadingChanged event’i tetiklenecektir.

Eğer ReadingChanged event’inin tetiklenme hızını değiştirmek istiyorsak _accelerometer değişkeninin ReportInterval property’sine yeni bir değer ataması yapmalıyız.

Son olarak, _accelerometer değişkeninin Shaken event’ini kullanarak telefonun sallanma durumunu yakalayabiliriz;

_accelerometer.Shaken += new TypedEventHandler<Accelerometer, AccelerometerShakenEventArgs>(Shaken);

Windows Phone 8 uygulamasında çekilen resmi crop ettirmek

05 December 2014 Yorum yapılmamış

Geçtiğimiz aylarda bir etkinlikle göstermek için geliştirdiğim demo uygulamasında kamera aracılığıyla resim çekmem gerekti. Fakat geliştirdiğim uygulama, çekilen resmin belli bir en x boy oranında olmasını gerektiriyordu.

Kamera aracılığıyla çekilen resmin istediğim en x boy oranına göre crop edilmesini ve uygulamama crop edilmiş halinin verilmesini sağlamalıydım.

Gayet basit bir şekilde aşağıdaki kod parçası aracılığıyla bunu sağlayabildim;

private void PickPhotoClick(object sender, RoutedEventArgs e)
{
	var _photoChooserTask = new PhotoChooserTask();
	_photoChooserTask.PixelWidth = 600;
	_photoChooserTask.PixelHeight = 300;
	_photoChooserTask.Completed += _photoChooserTaskCompleted;
	_photoChooserTask.Show();
}

Gördüğünüz gibi sadece PhotoChooserTask tipindeki değişkenin PixelWidth ve PixelHeight özelliklerine istediğim en x boy oranlarını atamam yeterli oldu.

Windows Phone 8 uygulamasında SystemTray’e Progressbar eklemek

06 November 2014 1 yorum

Windows Phone 8 için geliştirdiğimiz uygulamada uzun süren bir işlem esnasında kullanıcıya işlemin hala devam ettiğini göstermek isteriz.

Mesela, haberler sayfasında güncel haberleri web service’ten çekerken veya kullanıcının ekranda doldurduğu formu web service aracılığı ile kaydederken işlemin devam ettiğini ekranda göstermek isteriz.

Bunun için telefonda ekranın en üstünde bulunan SystemTray‘e ProgressIndicator eklememiz yeterli. Bunun için istediğimiz sayfanın xaml dosyasını açmalı;

<phone:PhoneApplicationPage
	x:Class="ProgressIndicatorOrnek.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
	xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	FontFamily="{StaticResource PhoneFontFamilyNormal}"
	FontSize="{StaticResource PhoneFontSizeNormal}"
	Foreground="{StaticResource PhoneForegroundBrush}"
	SupportedOrientations="Portrait" Orientation="Portrait"
	shell:SystemTray.IsVisible="True">

</phone:PhoneApplicationPage>

PhoneApplicationPage açılış ve kapanış tagları arasına aşağıdaki kod parçasını eklemeliyiz;

<shell:SystemTray.ProgressIndicator>
	<shell:ProgressIndicator IsIndeterminate="True" IsVisible="True" Text="Güncel haberler yükleniyor..." />
</shell:SystemTray.ProgressIndicator>

Böylece ilgili sayfa ekrana geldiğinde saatin de bulunduğu SystemTray alanında Güncel haberler yükleniyor… yazısı ile bir ProgressIndicator belirecek.

Açık Akademi Yaz Okulu 2014

23 August 2014 Yorum yapılmamış

Açık Akademi 2014 Yaz Okulu, Windows Phone 8.1 ve Universal App etkinliklerim

Her sene üniversitelerin yaz tatiline girmesiyle Microsoft tarafından bir Yaz Okulu etkinliği gerçekleştiriliyor.

Son birkaç yıldır olduğu gibi bu yıl da Microsoft Yaz Okuluna eğitmen olarak katıldım.

19 Ağustos 2014, 20 Ağustos 2014, 21 Ağustos 2014 ve 22 Ağustos 2014 tarihlerinde Microsoft Türkiye ofisinde gerçekleştirdiğim seanslarda Windows Phone 8.1 ve Universal App konularında eğitimler verdim.

Tüm Yaz Okulu öğrencilerine, beni sabırla dinledikleri için teşekkür ediyor, özverili katılımlarından dolayı da tebrik ediyorum.

Windows Phone 8 cihazın WiFi üzerinden internete bağlı olduğunu kontrol etme

18 July 2014 Yorum yapılmamış

MSDN‘de yeralan How to detect network changes for Windows Phone 8 makalesine göre Windows Phone cihazın WiFi üzerinden internete bağlı olduğunu anlamak için DeviceNetworkInformation class‘ının IsWiFiEnabled property‘sini kullanabiliriz.

Bu property sayesinde çok hızlı bir şekilde cihazda WiFi özelliğinin aktif olup/olmadığını yakalayabiliriz, fakat cihaz üzerinde WiFi aktif olabilir ama internete 3G üzerinden bağlı olabilir, DeviceNetworkInformation.IsWiFiEnabled bu durumda gene true değerini döndürecektir.

Eğer uygulamamızın çalıştığı cihazın internete WiFi üzerinden bağlı olduğundan emin olmak istiyorsak bir kontrol daha yapmalıyız.

NetworkInterface class‘ının NetworkInterfaceType property‘si eğer NetworkInterfaceType enum‘ından Wireless80211 değerine sahipse, cihazın WiFi üzerinden internete bağlı olduğundan emin olabiliriz.

Bu durumda yapmamız gereken kontrol aşağıdaki gibi olmalı;

if (DeviceNetworkInformation.IsWiFiEnabled && NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
{
// Cihaz WiFi üzerinden internete bağlı
}