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

Arşiv

Etiketlenen yazılar staticresource

Windows 8 uygulaması içerisinden fotoğraf ve video çekmek

10 June 2014 Yorum yapılmamış

Windows Store için geliştireceğimiz uygulama içerisinden fotoğraf ve video çekecek ve Fotoğraflar ve Videolar dizinlerine kaydedeceğiz.

Yeni oluşturduğumuz projenin Package.appxmanifest dosyasını açıyor ve Capabilities tabında yeralan Webcam, Videos Library, Pictures Library kutucuklarını işaretliyoruz. Böylece uygulamamızın çalışırken ihtiyaç duyacağı yetkileri kullanıcıdan talep edilmesini sağlıyoruz.

MainPage.xaml dosyasını açarak içerisine aşağıdaki xaml kodlarını ekleyelim ve ekranın altında bir AppBar gözükmesini, içerisinde bir adet StackPanel iki adette Button olmasını sağlayalım;

<Page.BottomAppBar>
	<AppBar>
		<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
			<Button Style="{StaticResource PhotoAppBarButtonStyle}" Click="PhotoButton_Click /">
			<Button Style="{StaticResource VideoAppBarButtonStyle}" Click="VideoButton_Click /">
		</StackPanel>
	</AppBar>
</Page.BottomAppBar>

Öncelikle PhotoButton_Click methodunun içini dolduralım;

private async void PhotoButton_Click(object sender, RoutedEventArgs e)
{
	var camera = new CameraCaptureUI();

	var capture = await camera.CaptureFileAsync(CameraCaptureUIMode.Photo);

	if (capture != null)
	{
		var file = await KnownFolders.PicturesLibrary.CreateFileAsync(Guid.NewGuid().ToString("N") + ".jpg", CreationCollisionOption.ReplaceExisting);

		await capture.CopyAndReplaceAsync(file);
	}
}

İlk olarak CameraCaptureUI sınıfından yeni bir değişken oluşturup, CaptureFileAsync() methodunu çağırıyoruz, parametre olarak CameraCaptureUIMode.Photo değerini veriyoruz, böylece fotoğraf çekmek için gerekli hazırlıklarımızı tamamlamış oluyoruz.

KnownFolders sınıfının PicturesLibrary özelliği sayesinde cihazın fotoğraf kütüphanesine erişiyoruz ve CreateFileAsync() methodunu kullanarak çekilen fotoğrafı kaydedebileceğimiz bir dosya oluşturuyoruz.

capture ismindeki değişkenin CopyAndReplaceAsync() methodu sayesinde webcam kullanılarak çekilen resmi kaydediyoruz.

Video çekimi yapacak VideoButton_Click methodunun içi PhotoButton_Click methoduna çok benziyor;

private async void VideoButton_Click(object sender, RoutedEventArgs e)
{
	var camera = new CameraCaptureUI();

	var capture = await camera.CaptureFileAsync(CameraCaptureUIMode.Video);

	if (capture != null)
	{
		var file = await KnownFolders.VideosLibrary.CreateFileAsync(Guid.NewGuid().ToString("N") + ".wmv", CreationCollisionOption.ReplaceExisting);

		await capture.CopyAndReplaceAsync(file);
	}
}

Üç önemli değişiklik var;

  • camera değişkeninin CaptureFileAsync() methoduna parametre olarak CameraCaptureUIMode.Photo değeri yerine CameraCaptureUIMode.Video değerini veriyoruz
  • KnownFolders sınıfının PicturesLibrary özelliği yerine VideosLibrary özelliğini kullanıyoruz
  • CreateFileAsync() methoduna parametre olarak verdiğimiz dosya isminin uzantısını jpg yerine wmv yapıyoruz

Böylece Windows 8 uygulaması içerisinden hem fotoğraf hem video çekebilir ve uygun dizinlere kaydedilmesini sağlayabiliriz.

Windows Phone için Bing arama uygulaması

02 August 2013 1 yorum

Windows Phone uygulamamıza internetten arama özelliği eklememiz gerektiği durumda, Bing arama motorunun API desteği olduğu için bunu yapabilmemiz çok zor olmayacaktır.

Windows Azure Markeplace üzerinden erişebileceğiniz Bing Search API – Web Results Only API sayfasından Bing Web Search API kullanım bilgilerine erişebiliriz, gerekli yetkiyi alabiliriz.

İlk olarak Sign In linkine tıklayarak oturum açalım ve aylık 5000 aramayı ücretsiz yapabilmemize olanak sağlayacak Sign Up butonuna tıklayarak gerekli yetkiyi alalım.

Sign Up butonuna tıkladığınızda ekrana sözleşme şartlarını kabul etmenizi sağlayacak bir ekran gelecek. Basitçe ileri-ileri diyerek geçebileceğiniz ekranlardan sonra aylık 5000 aramayı ücretsiz yapabileceğiniz yetkiyi almış olacaksınız.

Gelelim Windows Phone 8 projemize;

MainPage.xaml dosyasını açarak tasarımı aşağıdaki gibi olacak şekilde değiştirelim;

<phone:PhoneApplicationPage
	x:Class="BingSearchSample.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 Orientation="Horizontal" Margin="10,0,0,0">
			<Image Source="/Assets/bing-logo.png" Width="120" Height="45" />
			<TextBox Name="SearchKey" Width="350" InputScope="Search" KeyUp="SearchKey_OnKeyUp" />
		</StackPanel>

		<phone:LongListSelector Name="SearchResultList" Height="655" SelectionChanged="SearchResultList_OnSelectionChanged">
			<phone:LongListSelector.ItemTemplate>
				<DataTemplate>
					<StackPanel Margin="0,0,0,30">
						<TextBlock Text="{Binding Title}" Style="{StaticResource PhoneTextTitle2Style}" />
						<TextBlock Text="{Binding Description}" Style="{StaticResource PhoneTextSmallStyle}" TextWrapping="Wrap" />
						<TextBlock Text="{Binding DisplayUrl}" Style="{StaticResource PhoneTextAccentStyle}" />
					</StackPanel>
				</DataTemplate>
			</phone:LongListSelector.ItemTemplate>
		</phone:LongListSelector>
	</StackPanel>

	<phone:PhoneApplicationPage.ApplicationBar>
		<shell:ApplicationBar>
			<shell:ApplicationBarIconButton IconUri="/Assets/feature.search.png" Text="ara" Click="SearchButton_OnClick"></shell:ApplicationBarIconButton>
		</shell:ApplicationBar>
	</phone:PhoneApplicationPage.ApplicationBar>

</phone:PhoneApplicationPage>

Bir StackPanel içerisine Bing logosu ve arama kelimesinin girileceği TextBox nesnesini ekliyoruz;

<StackPanel Orientation="Horizontal" Margin="10,0,0,0">
	<Image Source="/Assets/bing-logo.png" Width="120" Height="45" />
	<TextBox Name="SearchKey" Width="350" InputScope="Search" KeyUp="SearchKey_OnKeyUp" />
</StackPanel>

SearchKey isimli TextBox nesnesinin InputScope özelliğine Search değerini veriyoruz, böylece TextBox‘a giriş yaparken klavye’de arama butonu gözüküyor olacak;

Sayfaya ApplicationBar, içerisine de ApplicationBarIconButton ekliyoruz, icon olarak feature.search.png dosyasını kullanacağız.

SDK ile birlikte bilgisayarınıza yüklenen örnek icon‘lara aşağıdaki yol ile ulaşabilirsiniz;

C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Icons

Arama kutusuna kelime girerken arama butonuna basıldığında veya ApplicationBar‘daki arama butonuna basınca Bing üzerinde arama yapacağız, TextBox‘ın KeyUp event’ini ve ApplicationBarIconButton‘ın Click event’ini yakalıyoruz;

private void SearchKey_OnKeyUp(object sender, KeyEventArgs e)
{
	if (e.Key == Key.Enter)
	{
		SearchBing();
	}
}

private void SearchButton_OnClick(object sender, EventArgs e)
{
	SearchBing();
}

Asıl arama olayının döneceği SearchBing() method’unu yazmadan önce projemizde yapmamız gereken düzenlemeler var.

Projenin References‘ına sağ tuşla tıklayıp Nuget Package Manager penceresini açalım ve Microsoft.Data.Services.Client paketini aratalım, OData Client for Windows Phone Apps paketini projeye ekleyelim;

Bing Search API – Web Results Only sayfasından bulabileceğiniz .NET C# Class Library class dosyasını indirip projeye ekliyoruz.

Gelelim SearchBing() method’una;

private void SearchBing()
{
	SystemTray.SetProgressIndicator(this, new ProgressIndicator
	{
		IsVisible = true,
		IsIndeterminate = true,
		Text = "Bing üzerinden arama yapılıyor..."
	});

	var searchUri = new Uri("https://user:[AccountKey]@api.datamarket.azure.com/bing/search");

	var container = new BingSearchContainer(searchUri);
	var query = container.Web(SearchKey.Text, null, null, null, null, null, null, null);

	query.BeginExecute(ar =>
	{
		var state = ar.AsyncState as DataServiceQuery<WebResult>;

		if (state != null)
		{
			var result = state.EndExecute(ar);

			if (result != null)
			{
				Dispatcher.BeginInvoke(() =>
				{
					SearchResultList.ItemsSource = result.ToList();

					SystemTray.SetProgressIndicator(this, null);
				});
			}
		}
	}, query);
}

İlk olarak SystemTray sınıfının static SetProgressIndicator method’unu çağırıyoruz, böylece arama başladığında ekranın üstünde ilerleme çubuğu belirecek;

Bing Search API – Web Results Only sayfasından elde edeceğiniz AccountKey ile Bing Search Uri oluşturuyoruz.

BingSearchContainer sınıfından yeni bir instance oluşturup, Web() method’unu çağırıyoruz, parametre olarak arama kelimemizi veriyoruz.

BeginExecute() method’u ile aramayı başlatıyoruz, gerekli kontrolleri yaptıktan sonra arama sonuç listesini Dispatcher.BeginInvoke içerisinde ekrandaki LongListSelector nesnesine bağlıyoruz.

Son olarak, LongListSelector içerisinde listelenen öğelerden birine tıklandığında ilgili adrese gitmesi için SelectionChanged event’ini yakalıyoruz;

var item = SearchResultList.SelectedItem as WebResult;

if (item != null)
{
	var webBrowserTask = new WebBrowserTask { Uri = new Uri(item.Url, UriKind.Absolute) };
	webBrowserTask.Show();
}

Windows Phone 8 ile telefonun operatörünü bulma

27 July 2013 Yorum yapılmamış

Windows Phone 8 için geliştirdiğiniz uygulamanın çalıştığı telefonun bağlı olduğu operatör‘ü bulmak isteyebilirsiniz.

Özellikle operatör‘e özel seçenekler çıkartmak veya kısıtlamalar getirmek için bunu yapmaya ihtiyacınız olabilir.

Windows Phone 8 SDK içerisinde yer alan DeviceNetworkInformation sınıfında Mobil Operator bilgisini kolaylıkla almanızı sağlayan static tanımlı CellularMobileOperator özelliği mevcuttur.

Hemen yeni bir proje oluşturarak kullanımını inceleyelim;

MainPage.xaml dosyasını açarak sayfanın tasarımını değiştirelim. StackPanel içerisine bir Button nesnesi ekleyelim, Content özelliğine Tıkla, Background özelliğine StaticResource PhoneAccentBrush, Height özelliğine 120 değerlerini verelim;

<phone:PhoneApplicationPage
	x:Class="OperatorSample.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 x:Name="TitlePanel" Margin="12,17,0,28">
			<TextBlock Text="http://www.enginpolat.com" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
			<TextBlock Text="operatör" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
		</StackPanel>

		<StackPanel Margin="12,0,12,0">
			<Button Content="Tıkla" Background="{StaticResource PhoneAccentBrush}" Height="120" Click="Button_OnClick" />
		</StackPanel>
	</StackPanel>

</phone:PhoneApplicationPage>

Background özelliğine StaticResource listesinden PhoneAccentBrush değerini vererek, buton’un arkarengini kullanıcının tercih ettiği tema rengine ayarlamış olduk;

Button‘a tıklandığında Button_OnClick() method’u tetiklenecek;

private void Button_OnClick(object sender, RoutedEventArgs e)
{
	var operatorAdi = DeviceNetworkInformation.CellularMobileOperator;

	MessageBox.Show(operatorAdi);
}

Butona tıkladığımızda ekrana, uygulamanın kurulu olduğu telefonun mobil operatörü gelmeli;

Windows Phone 8 için Share Task’larının kullanımı

20 December 2012 Yorum yapılmamış

Windows Phone 8 için share task‘ları kullanacağımız bir uygulama geliştireceğiz.

Bu uygulamanın geliştirilmesi sırasında ShareStatusTask, ShareLinkTask, ShareMediaTask, CameraCaptureTask gibi yapıları kullandığımız kodlar yazacağız.

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

Share Tasks 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

Ekran tasarımı için MainPage.xaml dosyasını aşağıdaki gibi güncelleyelim;

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

	<Grid.ColumnDefinitions>
		<ColumnDefinition Width="125"  />
		<ColumnDefinition Width="*" />
	</Grid.ColumnDefinitions>

	<TextBlock Text="SHARE TASKS" Style="{StaticResource PhoneTextNormalStyle}" Margin="15,0" Grid.Row="0" Grid.ColumnSpan="2" />

	<TextBlock Text="share status" Margin="10,0,0,10" Style="{StaticResource PhoneTextExtraLargeStyle}" Grid.Row="1" Grid.ColumnSpan="2" />
	<TextBlock Text="STATUS" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="2" Grid.Column="0" />
	<TextBox Margin="0,0,0,0" Name="txtShareStatus_Status" Grid.Row="2" Grid.Column="1" />
	<Button Content="PAYLAŞ" Name="btnShareStatus" Margin="0,0,0,0" Grid.Row="3" Grid.ColumnSpan="2" Click="btnShareStatus_Click" />

	<TextBlock Text="share link" Margin="10,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}" Grid.Row="4" Grid.ColumnSpan="2" />
	<TextBlock Text="TITLE" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="5" Grid.Column="0" />
	<TextBox Margin="0,0,0,0" Name="txtShareLink_Title" Grid.Row="5" Grid.Column="1" />
	<TextBlock Text="MESSAGE" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="6" Grid.Column="0" />
	<TextBox Margin="0,0,0,0" Name="txtShareLink_Message" Grid.Row="6" Grid.Column="1" />
	<TextBlock Text="LINK URL" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="7" Grid.Column="0" />
	<TextBox Margin="0,0,0,0" Name="txtShareLink_Url" InputScope="Url" Grid.Row="7" Grid.Column="1" />
	<Button Content="PAYLAŞ" Name="btnShareLink" Margin="0,0,0,0" Grid.Row="8" Grid.ColumnSpan="2" Click="btnShareLink_Click" />

	<TextBlock Text="share media" Margin="10,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}" Grid.Row="9" Grid.ColumnSpan="2" />
	<Button Content="KAMERA ÇEK ve PAYLAŞ" Name="btnShareMedia" Margin="0,0,0,0" Grid.Row="10" Grid.ColumnSpan="2" Click="btnShareMedia_Click" />
</Grid>

Butonlara basıldığında tetiklenecek method’ları MainPage.xaml.cs dosyasına ekleyelim;

private void btnShareStatus_Click(object sender, RoutedEventArgs e)
{
	var Status = txtShareStatus_Status.Text;

	ShareStatusTask task = new ShareStatusTask();
	task.Status = Status;

	task.Show();
}

private void btnShareLink_Click(object sender, RoutedEventArgs e)
{
	var Title = txtShareLink_Title.Text;
	var Message = txtShareLink_Message.Text;
	var Url = txtShareLink_Url.Text;

	ShareLinkTask task = new ShareLinkTask();
	task.Title = Title;
	task.Message = Message;
	task.LinkUri = new Uri(Url, UriKind.RelativeOrAbsolute);

	task.Show();
}

private void btnShareMedia_Click(object sender, RoutedEventArgs e)
{
	CameraCaptureTask task = new CameraCaptureTask();
	task.Completed += CameraCaptureTask_Completed;

	task.Show();
}

private void CameraCaptureTask_Completed(object sender, PhotoResult e)
{
	ShareMediaTask task = new ShareMediaTask();
	task.FilePath = e.OriginalFileName;

	task.Show();
}

ShareStatusTask, ShareLinkTask, ShareMediaTask sınıflarından yeni bir örnek oluşturulup, Show() method’u çağırıldığı zaman, telefonuna bağlı hesaplardan oluşan bir liste ekrana gelir ve seçilen hesap üzerinden paylaşım gerçekleştirilir.

Uygulamayı çalıştırdığımızda ve Paylaş butonlarından birine bastığınızda aşağıdaki aşağıdaki ekran görüntülerini görüyor olmamız lazım;

Share Tasks Windows Phone 8 Application Share Tasks Windows Phone 8 Application

Projenin kodlarını buradan indirebilirsiniz.

Windows Phone 8 Static Resource Text Style listesi

19 December 2012 Yorum yapılmamış

Windows Phone 8 için static resource text style listesini görebileceğimiz bir uygulama geliştireceğiz.

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

Text Styles 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="TEXT STYLE 1" Style="{StaticResource PhoneTextBlockBase}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 2" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 3" Style="{StaticResource PhoneTextSubtleStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 4" Style="{StaticResource PhoneTextTitle1Style}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 5" Style="{StaticResource PhoneTextTitle2Style}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 6" Style="{StaticResource PhoneTextTitle3Style}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 7" Style="{StaticResource PhoneTextSmallStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 8" Style="{StaticResource PhoneTextLargeStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 9" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 10" Style="{StaticResource PhoneTextGroupHeaderStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 11" Style="{StaticResource PhoneTextContrastStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 12" Style="{StaticResource PhoneTextAccentStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 12" Style="{StaticResource PhoneTextHugeStyle}" Margin="12,0"/>
	</StackPanel>
</Grid>

StaticResource olarak kullanabileceğimiz ThemeStyle‘ların ve TextStyle‘ların listesine MSDN‘de yer alan Theme Resources for Windows Phone sayfasından erişebiliriz.

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

Text Styles Windows Phone 8 Application

Projenin kodlarını buradan indirebilirsiniz.