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

Arşiv

Etiketlenen yazılar xmlns

Windows 10 UWP Uygulamalarının Hafıza Kullanım Durumu için MemoryManager sınıfını kullanmak

08 February 2016 Yorum yapılmamış

Windows 10 UWP uygulaması geliştirirken hafıza‘nın ne kadarını kullandığınızı ve kullanabileceğiniz ne kadar hafıza alanı kaldığını bulmanız gerekebilir.

Bu durumda Windows.System namespace‘i altında yeralan MemoryManager sınıfını kullanabiliriz.

Hemen Visual Studio açarak yeni bir proje oluşturalım;

Öncelikle MainPage.xaml dosyasını açalım ve içerisine aşağıdaki kodları yazarak ekranımızı tasarlayalım;

<Page
	x:Class="MemoryManagerOrnek.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:local="using:MemoryManagerOrnek">

	<StackPanel>

		<TextBlock Text="AppMemoryUsage:" />
		<TextBlock Name="AppMemoryUsage" />
		<TextBlock Text="AppMemoryUsageLimit:" />
		<TextBlock Name="AppMemoryUsageLimit" />

	</StackPanel>

</Page>

Şimdi MainPage.xaml.cs dosyasını açalım ve DispatcherTimer sınıfından yeni bir değişken tanımlayıp, MainPage sınıfının constructor‘ında, her 1 saniyede bir tetiklenmesini sağlayalım;

DispatcherTimer timer = null;

public MainPage()
{
	this.InitializeComponent();

	timer = new DispatcherTimer();
	timer.Interval = new TimeSpan(0, 0, 1);
	timer.Tick += timer_Tick;
	timer.Start();
}

Artık timer_Tick() metodumuzu yazabiliriz;

private void timer_Tick(object sender, object e)
{
	AppMemoryUsage.Text = string.Format("{0} ({1:0.00} MB)", MemoryManager.AppMemoryUsage, MemoryManager.AppMemoryUsage / (1024.0 * 1024.0));
	AppMemoryUsageLimit.Text = string.Format("{0} ({1:0.00} GB)", MemoryManager.AppMemoryUsageLimit, MemoryManager.AppMemoryUsageLimit / (1024 * 1024 * 1024));
}

Yukarıdaki metodun içerisinde öncelikle MemoryManager sınıfının AppMemorryUsage property‘sinin değerini okuduk ve bunu (1024 x 1024) değerine bölerek kaç megabayt (MB) yaptığını hesapladık, AppMemoryUsage isimli Textblock nesnesinde gösterdik.

Aynı şekilde MemoryManager sınıfının AppMemorryUsageLimit property‘sinin değerini okuduk ve bunu (1024 x 1024 x 1024) değerine bölerek kaç gigabayt (GB) yaptığını hesapladık, AppMemoryUsageLimit isimli Textblock nesnesinde gösterdik.

Uygulama açıldıktan sonra her 1 saniyede bir, uygulamanın o anda kullandığı hafıza miktarı ve kullanabileceği hafıza miktarı ekranda gösterilecek.

Not : Eğer uygulamayı bilgisayarınızda çalıştıracak olursanız, AppMemoryUsageLimit değeri olarak, sistemde kullanılabilir boş hafıza miktarını görmelisiniz. Eğer 512 MB hafızaya sahip bir cep telefonunda çalıştıracak olursanız, 185 MB limitini, 1024 MB (1 GB) hafızalı bir cep telefonunda çalıştıracak olursanız 390 MB limit görmelisiniz.

Windows Phone 8 uygulama arkaplan görselini Bing servislerinden almak

05 February 2014 1 yorum

Windows Phone 8 için geliştirdiğiniz uygulamanın veya Button, Image gibi nesnelerin arkaplan görselinin periyodik olarak değişmesini isteyebilirsiniz. Böylece uygulamanızın içerisinde sürekli olarak güncellenen bir bölüm oluşturabilirsiniz.

Microsoft‘un geliştirdiği arama motoru olan Bing, ana arama ekranının arkaplan görselini periyodik olarak arkaplan görselini değiştirir.

Öncelikle Bing‘in arkaplan görselini nasıl değiştirdiğini anlamamız lazım. Eğer Bing tarayıcınızda açıldıktan sonra yaptığı isteklere bakacak olursanız, http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 adresine bir çağrı yaptığını görebilirsiniz.

Bu isteğin parametreleri;

format, bu parametre ile dönüş cevabının xml formatında olması sağlanıyor
idx, bu parametre ile Bing’in arkaplan görsellerinden kaçıncı sıradakinin alınacağı belirleniyor
n, bu parametre ile kaç görselin bilgisinin alınacağı belirleniyor

http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 adresine yapacağımız istek ile Bing‘in ilk sıradaki arkaplan görsellerinin bilgilerini xml formatında elde edeceğiz.

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

<phone:PhoneApplicationPage
	x:Class="BingBackground.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">

	<StackPanel>
		<StackPanel.Background>
			<ImageBrush x:Name="imgBackground"></ImageBrush>
		</StackPanel.Background>
	</StackPanel>

</phone:PhoneApplicationPage>

Böylece StackPanel nesnesinin arkaplanını imgBackground isimli ImageBrush nesnesi ile güncelleyebileceğiz.

MainPage.xaml.cs dosyasında yeralan MainPage class’ının constructor‘ında LoadBackgroundImage() method’unu çağıralım. LoadBackgroundImage() method’unda WebClient sınıfından yeni bir örnek oluşturup http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 adresine istek yapacağız;

private async void LoadBackgroundImage()
{
	WebClient client = new WebClient();

	client.DownloadStringCompleted += (sender, e) =>
	{
		if (e.Error == null && !string.IsNullOrEmpty(e.Result))
		{
			var doc = XDocument.Parse(e.Result);

			var url = (from node in doc.Descendants("url") select node.Value).FirstOrDefault();

			var uri = new Uri("http://www.bing.com" + url);

			client.OpenReadCompleted += (s, args) =>
			{
				var image = new BitmapImage();
				image.SetSource(args.Result);

				imgBackground.ImageSource = image;
			};
			client.OpenReadAsync(uri);
		}
	};

	client.DownloadStringAsync(new Uri("http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1"));
}

DownloadStringAsync() method’unu kullanarak yaptığımız isteğin cevabını DownloadStringCompleted event’i ile alabiliyoruz. string tipindeki cevabın boş veya hatalı olmadığını kontrol ettikten sonra XDocument sınıfının static Parse() method’unu kullanarak parse ediyoruz.

url isimli element‘in içinde yeralan arkaplan görseli adresinin başına http://www.bing.com bilgisini ekliyoruz, böylece Bing‘in arkaplan görselinin adresini tam olarak elde ediyoruz.

Aynı WebClient değişkenini kullanarak tam adresini elde ettiğimiz görsel dosyasına ulaşmak için OpenReadAsync() method’unu çağırıyoruz ve cevabı OpenReadCompleted event’i ile elde ediyoruz.

OpenReadCompleted event’i içerisinde elde ettiğimiz Stream ile yeni bir BitmapImage nesnesini dolduruyoruz ve MainPage.xaml içerisinde tanımladığımız imgBackground nesnesinin görseli olarak belirliyoruz.

Böylece Bing‘in arkaplan görseli değiştikçe bizim uygulamamızda ilgili alanın görseli değişecektir.

Windows Phone 8 için Maps kullanımı

16 February 2013 Yorum yapılmamış

Yeni Maps API sayesinde Windows Phone 8 için harita tabanlı uygulamalar geliştirebiliyoruz.

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

Windows Phone 8 App Project : Windows Phone Maps

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

Windows Phone 8 projemizde Map kontrolünü kullanabilmek için öncelikle ID_CAP_MAP Capability‘sini WMAppManifest.xml dosyasında etkinleştirmeliyiz;

WMAppManifest.xml : ID_CAP_MAP Capability

İlk olarak MainPage.xaml dosyasında phone:PhoneApplicationPage tag’ına

xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"

xml namespace‘ini eklememiz gerekiyor.

Artık Map kontrolünü ekranımıza ekleyebiliriz;

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map />
</Grid>

Ekrana eklediğimiz Map kontrolünün belli bir koordinatı göstermesi için Center özelliğini ayarlamamız gerekmektedir. İstanbul için örnek;

Center="41.0205, 29.0865"

Kodumuzun son hali;

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map Center="41.0205, 29.0865" />
</Grid>

Yakınlaşma miktarını ayarlamak için de ZoomLevel özelliğini kullanmamız gerekmektedir;

ZoomLevel="14"

ZoomLevel özelliği 1 ile 20 arasında değer almaktadır. 1 değeri ile en yakın zoom, 20 ile en uzak zoom ayarlamış oluruz.

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map Center="41.0205, 29.0865" ZoomLevel="14" />
</Grid>

Haritanın gösterim modunu CartographicMode özelliğine atayacağımız değer ile belirleyebiliriz. Varsayılan değeri Road olan CartographicMode özelliğine MapCartographicMode enum’ından şu değerler atanabilir;

  • Road
  • Aerial
  • Hybrid
  • Terrain
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map Center="41.0205, 29.0865" ZoomLevel="14" CartographicMode="Terrain" />
</Grid>

MapCartographicMode.RoadMapCartographicMode.AerialMapCartographicMode.HybridMapCartographicMode.Terrain

Ayrıca ColorMode özelliğine MapColorMode enum’ından Light veya Dark değerlerinden birini atayarak harita’nın aydınlık veya karanlık gözükmesini sağlayabiliriz.

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map ColorMode="Dark" />
</Grid>

MapColorMode.LightMapColorMode.Dark

Ayrıca Heading özelliğine 0 ile 360 arası değer atayarak haritanın yukarısında hangi yönün bulunacağını belirleyebiliriz. Örneğin, 0 değerini atayarak haritanın yukarısında Kuzey yönünün gözükmesini, 90 değerini atayarak Batı yönünün gözükmesini, 180 değerini atayarak Güney yönünün gözükmesini, 270 değerini atayarak Doğu yönünün gözükmesini sağlayabiliriz.

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map Center="41.0205, 29.0865" ZoomLevel="14" Heading="270" />
</Grid>

Son olarak Pitch özelliğine 0 ile 75 arası değer atayarak haritaya bakış açımızı değiştirebiliriz. Örneğin haritada 60 derecelik açı ile İstanbul şöyle gözüküyor;

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,12">
	<maps:Map Center="41.0205, 29.0865" ZoomLevel="14" Pitch="60" />
</Grid>

Pitch

Not : Harita kontrolü üzerinde daha fazla geliştirme seçeneği elde etmek için (örneğin Pushpin) Windows Phone Toolkit‘i indirip projenize ekleyebilirsiniz.