Tag: Windows Phone

Panel z najciekawszymi aplikacjami WP7

Jakiś czas temu ruszyła nowa strona poświęcona aplikacjom na Windows Phone. Możecie ją znaleźć tu: http://www.microsoft.com/poland/windowsphone/najlepsze-polskie-aplikacje/. Strona ta zawiera dwie grupy aplikacji. Pierwsza z nik to między innymi Facebook, Endomondo, Allegro czy Ceneo– czyli aplikacje top, lub też “must have”.

Druga grupa stanowi aplikacje promowane przez zespół Microsoft – aktualizacja znajdujących się na niej aplikacji będzie częstsza niż pierszej grupy, jednakże nie częściej niż ok 2 tygodnie. Na tej liście można się również znaleźć wykupując za punkty GeekClub pakiet promocyjny – w jego skład wchodzi również promocja aplikacji w przeglądarce Marketplace znajdującej się na telefonie…


WP 7.1.1 – Oficjalnie dostępne

Na stronach Microsoft jest dostępne do pobrania Windows Phone 7.1.1 Update (pisałem o wersji CTP tu).

Bezpośredni link: http://www.microsoft.com/download/en/details.aspx?id=29233

Co ciekawe nie ma konieczności odinstalowywania wersji CTP – co raczej rzadko się zdarzało w historii tej platformy :) Tak to wyglądało u mnie :)

Dla przypomnienia – dzięki 7.1.1 istnieje możliwość rozróżnienia urządzeń, które posiadają niższe parametry, dzięki czemu można dostosować ilość obliczeń / odświeżeń klatek dokonywanych w aplikacji do słabszych urządzeń. Dodatkowo istnieje możliwość wyboru emulatora (512 MB / 256 MB).

Ale to nie wszystko! SDK (a właściwie emulator) wreszcie działa bez problemu na Windows 8! DLa wszystkich, którzy wyposażyli się już w kafelki na “dużej” maszynie będzie to duży plus przy pracy z WP7 :)

Jeszcze kilka linków:

What’s new: http://msdn.microsoft.com/en-us/library/hh855084(v=vs.92).aspx

Tworzenie aplikacji na urządzenia 256MB http://msdn.microsoft.com/en-us/library/hh855081(v=vs.92).aspx


WP7 – Database tip

Jednym z najbardziej rozpowszechnionych błędów związanych z aplikacjami na WP7 korzystającymi z bazy danych jest błąd inicjowania tabel. Objawiał się on informacją o nieistniejących tabelach w momencie gdy przy tworzeniu bazy nie zostały do niej dodane żadne wpisy. Okazuje się, że po zainstalowaniu aktualizacji WP 7.1.1 błędu tego nie udało mi się już zreprodukować. Tak to jest, gdy posty zalegają w kolejce i nie zawsze jest czas, żeby na spokojnie je opisać :)

Niemniej jednak – jeżeli tworzymy bazę danych warto do niej dodać przykładowy wpis (najlepiej do dodatkowej, fakeowej tabeli). Dzięki temu silnik SQL CE poprawnie zainicjuje wszystkie tabele co pozwoli uniknąć problemu nieistniejących tabel. Dlaczego? Ponieważ nawet jeżeli błąd jest poprawiony w nowych uaktualnieniach, to nie mamy grawancji, że każdy użytkownik kożysta z najnowszej wersji systemu (dystrybucja uaktualnień u operatorów niestety różnie trwa, szczególnie w przypadku telefonów z USA brandowanych przez AT&A).

Inny problem, na który chciałbym zwrócić uwagę jest dużo bardziej prozaiczny. Chodzi o sposób eksponowania tabel w klasie kontekstu bazy danych. Przyzwyczajenie do właściwości (properties) okazuje się tu niestety zabójcze dla projektu.

Wyobraźmy sobie poniższy kod:

1
2
3
4
5
6
7
8
9
public class SampleDataContext : DataContext
{
	public SampleDataContext(string connectionString)
		: base(connectionString)
	{
	}
 
	public Table<SampleEntry> DataEntries { get; set; }
}

Okazuje się, że po jego uruchomieniu każda próba odwołania się do tabeli otrzymujemy błąd jak na poniższym screenie (Value can not be null):

Okazuje się, że w takim przypadku rozwiązanie zakrawa wręcz o banał, ponieważ wystarczy usunąć dodaną przez nas podświadomie deklarację gettera i settera czyli { get; set; } przy definicji tabeli – zamiast propercji powinna ona być zwykłym polem, o czym warto pamiętać, bo może wam to zaoszczędzić ładny kawałek czasu – w moim przypadku ta “pomyłka” kosztowała 3 godziny :)

 


Windows Phone SDK 7.1.1 Update CTP

W związku z premierą telefonu Nokia Lumia 610 na Mobile World Congress na stronach Microsoft Download pojawiła się wersja Windows Phone SDK 7.1.1 CTP. Wychodząc na przeciw rynkowi urządzeń mobilnych system Windows Phone szerzej zagości wśród urządzeń ze “słabszymi” parametrami (tańsze procesory i 256MB RAM). Aby zapewnić, że aplikacje będą przygotowane do płynnego działania również na takich urządzeniach nowe API udostępnia dostatkowe funkcjonalności. Od razu zaznaczę, że system jest na tyle zoptymalizowany, że nie ma tu najmniejszych problemów z wydajnością.

Do nowych funkcjonalności należą:

Dwa obrazy emulatora – tym razem przy testowaniu aplikacji mamy do dyspozycji emulator z pamięcią 512MB RAM (domyślny) oraz z 256MB RAM. Opcje te widać na liście wyboru emulatora:

 

 

 

Nowe API

Gdy chcemy rozpoznać na jakim urządzeniu pracujemy wystarczy wykorzystać poniższy kawałek kodu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try
{
	Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
	if (result < 94371840L)
		// IsLowMemDevice = true;
	else
	{
		// IsLowMemDevice = false;
	}
}
catch (ArgumentOutOfRangeException)
{
	// Windows Phone OS update not installed, which indicates a 512-MB device. 
}

Warunek ten jest związany z faktem, że przy standardowej konfiguracji urządzenia działająca w tym momencie aplikacja ma do dyspozycji maksymalnie 90MB pamięci RAM. W przypadku urządzeń wyposażonych tylko w 256MB pamięci operacyjnej takie zużycie zagrażałoby stabilności pozostałych mechanizmów platformy. Warto już teraz zadbać o to, by nowi odbiory byli w stanie korzystać z naszych aplikacji i w razie konieczności np ograniczyć taktowanie zegara gry lub wykorzystywać mniej zasobochłonne operacje.

Więcej szczegółów na stronach MSDN.


Krótka Piłka.. czyli Windows Phone vs. iPhone

Już w środę 29 lutego podczas Inżynierskich Targów Pracy odbędzie się konfrontacja dwóch platform. W lewym narożniku Windows Phone reprezentowany przeze mnie, natomiast w prawym narożniku iPhone (reprezentowany przez Tomasza Janeczko). Podczas prezentacji przeprowadzimy swego rodzaju pojedynek mający na celu porównanie wspomnianych systemów z punktu widzenia programistów… Zajmiemy się ogólnymi zagadnieniami dotyczącymi zarówno sprzętu, jego dostępności, wymagań systemowych, API oraz zaprezentujemy przykładową aplikację stworzoną w analogiczny sposób na obu systemach. Żywy kod, 5 minutowe sloty, konkrety, po prostu krótka piłka :) Kto zwycięży? – o tym zadecyduje publiczność…

Ilość miejsc ograniczona!

Strona wydarzenia


Skype dla Windows Phone

Dwa dni temu Microsoft opublikował Skype dla Windows Phone w wersji pre beta. Z racji na wersję nie jest ona jeszcze wspierana na wszystkich urządzeniach – przy instalacji dostałem informację o niekompatybilności LG Quantum, natomiast HTC Surround, Trophy i Nokia Lumia radzą sobie z tym bez problemu.

Niemniej jednak werja 0.2 działa dość płynnie i pozwala jednemu z najpopularniejszych komunikatorów internetowych zagościć na platformie Windows Phone :) Testową wersję można pobrać z tego miejsca. Proces instalacji nie jest standardowy i wymaga walidacji numeru telefonu, o który jesteśmy proszeni podczas pobierania XAP’a na telefon. Podczas samej instalacji może wystąpić błąd wraz z informacją o przesłaniu instrukcji na adres email. W moim przypadku tak właśnie było, jednakże aplikacja zainstalowała się poprawnie i nie otrzymałem żadnego maila :) Gorąco zachęcam do pobrania i przetestowania nowej aplikacji :)


IsolatedStorageSettings wrapper

Często w aplikacjach tworzonych na Windows Phone 7 posługujemy się ustawieniami aplikacji, dzięki czemu staje się ona bardziej przyjazna dla użytkownika. Służy do tego klasa IsolatedStorageSettings wraz ze słownikiem ApplicationSettings. Okazuje się jednak, że kod odpowiedzialny za ciągłe sprawdzanie zawartych w niej danych oraz ich rzutowanie na odpowiednie typy powtarza się w wielu miejscach. Przedstawiam zatem moje podejście, które stosuję w praktyczniej każdej aplikacji na WP7 i umieszczam je w klasie SettingsProvider.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class SettingsProvider
{
	...
 
	#region internal
	private static void SetValue(string key, T value)
	{
		if (IsolatedStorageSettings.ApplicationSettings.Contains(key))
		{
			IsolatedStorageSettings.ApplicationSettings[key] = value;
		}
		else
		{
			IsolatedStorageSettings.ApplicationSettings.Add(key, value);
		}
	}
 
	private static T GetValueOrDefault(string key, T defaultValue)
	{
		if (IsolatedStorageSettings.ApplicationSettings.Contains(key))
		{
			return (T)IsolatedStorageSettings.ApplicationSettings[key];
		}
		else
		{
			IsolatedStorageSettings.ApplicationSettings.Add(key, defaultValue);
			return defaultValue;
		}
	}
	#endregion
}

Dzięki temu mogę w prosty sposób uwidocznić dla pozostałych komponentów projektu właściwości korzystające z przedstawionych powyżej metod generycznych. Na przykład w ten sposób:

1
2
3
4
5
public string UserName
{
	get { return GetValueOrDefault("UserName", ""); }
	set { SetValue("UserName", value); }
}

Mam nadzieję, że przedstawiony kawałek kodu przyda się wam do wygodniejszego i szybszego korzystania z ustawień aplikacji na Windows Phone :)


WP7 – Webcast o obsłudze kamery

Kolejny webcast z cyklu poświęconego Windows Phone. Tym razem dotyczy on obsługi aparatu wbudowanego w telefon.

Pliki źródłowe do pobrania:

[download id=”7″]


WP7 – Dwa webcasty o optymalizacji

Jakiś czas temu pojawiły się moje dwa kolejne webcasty poświęcone technologii Windows Phone 7.

Zapraszam do oglądania!


WP7 – nie tylko Shake

Nowy emulator dla Windows Phone dostarcza możliwość testowania aplikacji wykorzystujących akcelerometr. Okazuje się, że możemy przy jego pomocy uruchamiać sekwencje zmian wektora grawitacji, co pozwala uprościć proces testowania. Jak to zrobić?

W dodatkowym panelu emulatora w zakładce Accelerometer mamy dostęp do sekcji Recorded Data.

Domyślnie zawiera ona jedną możliwą wartość i nazwie Shake. Jest to predefiniowany zestaw danych, które są przetwarzane i przesyłane do naszej aplikacji podczas uruchomienia na emulatorze. Co jednak zrobić jeżeli chcemy wykorzystać inne dane? Należy udać się do katalogu C:\Program Files (x86)\Microsoft XDE\1.0\sensordata\acc, w którym znajduje się plik Shake. Jest to zwykły plik XML, którego najważniejsza zawartość sprowadza się do elementów AccData. Przykład takiego elementu widoczny jest poniżej:

1
<AccData offset="2185" x="00.45899999" y="-00.69300002" z="-00.49500000" />

Znaczenie atrybutów X, Y i Z jest dość oczywiste, natomiast atrybut offset określa w którym momencie ma zostać uruchomiony dany wiersz danych – jednostką miary jest tu milisekunda. W związku z tym tworzymy nowy plik (najwygodniej metodą copy’ego paste’a :) ) i edytujemy zawarte w nim dane. W rezultacie na liście wyboru pojawiają się kolejne opcje:


  • O mnie

    Maciej Grabek

    Moje profile na:

    MVP

    Codeguru.pl GoldenLine
    Twitter CodeProject

  • english version
  • Polecam

  • Copyright © Maciej Grabek. All rights reserved.
    Powered by WordPress
    %d bloggers like this: