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

Arşiv

Etiketlenen yazılar string.format

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);

Universal App ekran çözünürlüğünü bulmak

05 July 2014 Yorum yapılmamış

Windows Store ve Windows Phone için tek bir uygulama geliştiriyorsunuz (Universal App) ve uygulamanın çalıştığı cihazın ekran çözünürlüğünü bulmanız gerekiyor.

Öncelikle Windows.Graphics.Display namespace‘inde yeralan DisplayInformation sınıfının RawPixelsPerViewPixel property‘sinin değerini okuyalım;

var rawPixelPerView = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;

Şimdi ekran genişliği ve yüksekliği bilgilerini okuyarak yukarıda bulduğumuz değişken ile çarparak ekran çözünürlüğünü hesaplayabiliriz;

var width = Window.Current.Bounds.Width * rawPixelPerView;
var height = Window.Current.Bounds.Height * rawPixelPerView;

Hesapladığımız ekran çözünürlüğünü bir MessageDialog aracılığı ile kullanıcıya göstermek için ShowAsync() methodunu kullanıyoruz;

var dialog = new MessageDialog(string.Format("Çözünürlük: {0} * {1}", width, height);
dialog.ShowAsync();

Windows Phone 8 için Pil Durumu uygulaması

19 December 2012 2 yorum

Windows Phone 8 için güncel pil durumunu görebileceğimiz bir uygulama geliştireceğiz.

Bu uygulamanın geliştirilmesi sırasında Battery, PhoneApplicationPage, ApplicationBar, TimeSpan gibi yapıları kullandığımız kodlar yazacağız.

Öncelikle BatteryLevel isimli yeni bir Windows Phone App projesi oluşturalım;

Battery Level Windows Phone Application Project

Proje oluşturduktan sonra gelen Windows Phone Platform versiyon seçim penceresinde Windows Phone OS 8.0 seçeneğinin seçili olduğundan emin olmalıyız;

Windows Phone 8.0 SDK

MainPage.xaml dosyasını aşağıdaki gibi güncelleyelim;

<Grid x:Name="LayoutRoot" Background="Transparent">
	<Grid.RowDefinitions>
		<RowDefinition Height="Auto"/>
	</Grid.RowDefinitions>

	<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
		<TextBlock Text="PİL SEVİYESİ" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
	</StackPanel>
	<TextBlock HorizontalAlignment="Stretch" Margin="0,0,70,-125" TextWrapping="Wrap" Text="- / 100" Name="lblRemainingChargePercent" VerticalAlignment="Bottom" Width="340"/>
	<TextBlock HorizontalAlignment="Stretch" Margin="35,0,105,-180" TextWrapping="Wrap" Text="- / 100" Name="lblRemainingDischargeTime" VerticalAlignment="Bottom" Width="340"/>
</Grid>

<phone:PhoneApplicationPage.ApplicationBar>
	<shell:ApplicationBar IsVisible="True">
		<shell:ApplicationBarIconButton IconUri="/Assets/appbar.refresh.png" Text="Güncelle" Click="RefreshBatteryLabel" />
	</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

İki TextBlock nesnesinde güncel pil durumunu göstereceğiz. Ayrıca eklediğimiz ApplicationBar sayesinde telefonun altında bir güncelleme butonu konumlandırmış olacağız.

ApplicationBar‘a eklediğimiz ApplicationBarIconButton nesnesine basıldığında RefreshBatteryLabel() method’unun tetiklenmesini sağlıyoruz.

MainPage.xaml.cs dosyasına RefreshBatteryLevel() method’unu ekleyelim;

private void RefreshBatteryLabel(object sender, EventArgs e)
{
	Battery Pil = Battery.GetDefault();

	int Yuzde = Pil.RemainingChargePercent;
	int Gun = Pil.RemainingDischargeTime.Days;
	int Saat = Pil.RemainingDischargeTime.Hours;
	int Dakika = Pil.RemainingDischargeTime.Minutes;

	string SarjYuzdesi = string.Format("Kalan pil : {0} / 100", Yuzde);

	string SarjSuresi = "Kalan şarj süresi : ";

	if (Gun > 0)
	{
		SarjSuresi += string.Format("{0} gün ", Gun);
	}
	if (Saat > 0)
	{
		SarjSuresi += string.Format("{0} saat ", Saat);
	}
	if (Dakika > 0)
	{
		SarjSuresi += string.Format("{0} dakika ", Dakika);
	}

	lblRemainingChargePercent.Text = SarjYuzdesi;

	lblRemainingDischargeTime.Text = SarjSuresi;
}

Son olarak, MainPage sınıfının constructor‘ında RefreshBatteryLevel() method’unu çağırırsak, uygulama ilk açıldığında pil seviyesi güncellenmiş olur;

RefreshBatteryLabel(null, null);

Uygulamayı çalıştırdığımızda aşağıdaki ekran görüntüsünü görüyor olmamız lazım;

Battery Level Windows Phone 8 Application

Projenin kodlarını buradan indirebilirsiniz.