<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kubiczek devblog &#187; Android</title>
	<atom:link href="http://blog.kubiczek.eu/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kubiczek.eu</link>
	<description>I&#039;m lovin&#039; it ;)</description>
	<lastBuildDate>Thu, 19 Jan 2012 12:09:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SSL connection lag on Android</title>
		<link>http://blog.kubiczek.eu/2011/11/ssl-connection-lag-on-android/</link>
		<comments>http://blog.kubiczek.eu/2011/11/ssl-connection-lag-on-android/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 08:21:38 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=439</guid>
		<description><![CDATA[While I was developing a Homer application for Android, I met frustrating problem with delays on ssl connection. Homer uses ssl for every http request, so I decided use HttpsURLConnection class for this job. Everything was fine until you run Homer in LAN without access to internet. Than, unexpectedly, every request started taking about 5 [...]]]></description>
			<content:encoded><![CDATA[<p>While I was developing a Homer application for Android, I met frustrating problem with delays on ssl connection. Homer uses ssl for every http request, so I decided use <a href="http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html">HttpsURLConnection</a> class for this job. Everything was fine until you run Homer in LAN without access to internet. Than, unexpectedly, every request started taking about 5 to 10 seconds. If you connect the internet, everything was fine back.</p>
<p>I resigned from HttpsUrlConnection and made directly communication using sockets. However, it didn&#8217;t solve problem &#8211; every call to <a href="http://developer.android.com/reference/javax/net/ssl/SSLSocket.html#getSession()">SSLSocket.getSession()</a> took the same 5 to 10 seconds as before. </p>
<p>Finaly, I found solution. There is a bug in Android prior to 4.0 version, which makes reverse DNS lookup for every https request. So, when you have no access to dns servers, it takes long time. To fix problem you can use code from:</p>
<p><a href="http://code.google.com/p/android/issues/detail?id=13117#c14">http://code.google.com/p/android/issues/detail?id=13117#c14</a></p>
<p>Voila!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2011/11/ssl-connection-lag-on-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Galaxy Tab 10.1 and DatagramSocket problem</title>
		<link>http://blog.kubiczek.eu/2011/09/galaxy-tab-10-1-and-datagramsocket-problem/</link>
		<comments>http://blog.kubiczek.eu/2011/09/galaxy-tab-10-1-and-datagramsocket-problem/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 17:01:55 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=431</guid>
		<description><![CDATA[While working with sockets on Android you may face the problem with InvalidArgumentException thrown when you try to create a new instance of DatagramSocket: InetSocketAddress bindInetAddr = new InetSocketAddress(bindAddr, bindPort); DatagramSocket ssdpUniSock = new DatagramSocket(bindInetAddr); The second line causes InvalidArgumentException error. Fortunately, the solution exists and is quite simple. Instead of creating an instance of [...]]]></description>
			<content:encoded><![CDATA[<p>While working with sockets on Android you may face the problem with InvalidArgumentException thrown when you try to create a new instance of DatagramSocket:</p>
<p><code>InetSocketAddress bindInetAddr = new InetSocketAddress(bindAddr, bindPort);<br />
DatagramSocket ssdpUniSock = new DatagramSocket(bindInetAddr);</code></p>
<p>The second line causes InvalidArgumentException error. Fortunately, the solution exists and is quite simple. Instead of creating an instance of <a href="http://developer.android.com/reference/java/net/DatagramSocket.html">DatagramSocket</a>, you can obtain in from <a href="http://developer.android.com/reference/java/nio/channels/DatagramChannel.html">DatagramChannel</a> and then bind an address:</p>
<p><code>DatagramChannel channel = DatagramChannel.open();<br />
DatagramSocket ssdpUniSock = channel.socket();<br />
InetSocketAddress bindInetAddr = new InetSocketAddress(bindAddr, bindPort);<br />
ssdpUniSock.bind(bindInetAddr);<br />
</code></p>
<p>Voila, done!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2011/09/galaxy-tab-10-1-and-datagramsocket-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warsztat programisty Androida</title>
		<link>http://blog.kubiczek.eu/2011/07/warsztat-programisty-androida/</link>
		<comments>http://blog.kubiczek.eu/2011/07/warsztat-programisty-androida/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 09:25:45 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Praca, projekty, portfolio]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=424</guid>
		<description><![CDATA[Tak się jakoś złożyło, że ostatnio w moim mobilnym warsztacie zebrało się całkiem sporo różnorakiego sprzętu, który świetnie sprawdza się w jednym praktycznym zastosowaniu: testy, testy, testy &#8211; każde z tych urządzeń jest niepowtarzalne i zapewnia zupełnie odmienne “doznania” dla użytkownika. Oto i one: Poniżej krótki opis widocznych na zdjęciu urządzeń, zaczynając od lewej strony: [...]]]></description>
			<content:encoded><![CDATA[<p>Tak się jakoś złożyło, że ostatnio w moim mobilnym warsztacie zebrało się całkiem sporo różnorakiego sprzętu, który świetnie sprawdza się w jednym praktycznym zastosowaniu: testy, testy, testy &#8211; każde z tych urządzeń jest niepowtarzalne i zapewnia zupełnie odmienne “doznania” dla użytkownika. Oto i one:</p>
<p><img src="https://lh3.googleusercontent.com/-4RdzL06CT-8/Thmu-SkkcVI/AAAAAAAAFb4/ulhZHNWfh94/s800/IMG_4993.jpg" alt="Stajnia Adama" style="width:570px" /></p>
<p>Poniżej krótki opis widocznych na zdjęciu urządzeń, zaczynając od lewej strony:</p>
<p>Od razu na początek interesująca ciekawostka: “devopment platform” od Qualcomma. Zbudowany na jednordzeniowym procesorze Snapdragon MSM8655 taktowanym zegarem 1.2GHz i z 1GB RAM w środku, na zewnątrz wygląda jak prototyp smartfona z końca ubiegłego wieku (brakuje tylko wystającej antenki). Pozory jednak mylą i jest to niezła, zeszłoroczna maszyna z systemem w wersji 2.3. No ale w kieszeni się nie mieści :)</p>
<p>Kolejny smartphone, Galaxy S, charakteryzuje się tak jak i inne produkty Samsunga kiepsko działającym automatycznym dostosowywaniem jasności ekranu. Jasność ekranu zmienia się co chwilę w zbyt dużym zakresie i jak dla mnie jedynym prawidłowym rozwiązaniem jest wyłączenie tej funkcji. Jednak sam ekran to już inna bajka &#8211; 4”, 480x800px i cukierkowa kolorystyka &#8211; po prostu super! Aktualnie używam tego telefonu na co dzień, i sprawdza się prawie tak dobrze jak&#8230; iPhone 3GS w którym niestety ducha wyzionął moduł GSM. </p>
<p>Trzeci telefon, to jednocześnie pierwszy smartphone, jaki wszedł w moje posiadanie i na którym zaczynałem realizować swoje pierwsze projekty. Samsung Galaxy Spica (i5700) &#8211; zaktualizowany do systemu 2.1 i z ekranem o rozdzielczości 320x480px. Dosyć słabe urządzonko na którym android wyraźnie się dusi i krztusi, ale dzięki temu, pisząc soft, baczniejszą uwagę zwraca się na kwestie optymalizacji.</p>
<p>Kolejny model to HTC Wildfire z systemem 2.2, który w odróżnieniu od Samsunga S, w celu korzystania z radia FM nie wymaga włożonej karty SIM (SIC!!!). Choć sama jakość odbiornika jest bardzo niska, Samsung w tym samym miejscu odbiera dużo lepszy sygnał. Jak na niepozorny wygląd, telefon te działa całkiem żwawo &#8211; wydaje się, że nawet sprawniej od i5700. Być może wynika to z niewielkiego ekranu o rozdzielczości 240x320px i przekątnej 3.2”, dzięki któremu jest mniej pikseli do rysowania :)</p>
<p>Pora na Chińską zabawkę z okrągłym przyciskiem (Apple nie pozwie o to producenta?) i piękną obudową w kolorze kości słoniowej. Mini tablet o przekątnej 6.9” napędzany przez Androida w wersji 1.6 działającym na 128MB Ramu, a za “feeling” i interakcje z użytkownikiem odpowiada opornościowy(!) ekran dotykowy pracujący w rozdzielczości.. hmm, nie wiem jakiej. Co ciekawe okrągły przycisk na obudowie jest JEDYNYM fizycznym przyciskiem w tym urządzeniu (nie ma on przycisku włączenia, blokady, powrotu, głośności ani żadnych innych). Idea Jobsa stała się realna dzięki chińczykom :) Ale tak czy siak, toporna to maszyna, baaardzo toporna.</p>
<p>No i w końcu “gwiazda wieczoru” czyli tablet mogący śmiało konkurować z Ipadem2: Samsung Galaxy Tab 10.1 z systemem 3.1. Wszystko świetnie, tylko dlaczego nie ma on wbudowanego normalnego portu micro-USB? Znowu kolejny rodzaj kabelka niezbędny na podorędziu. A tabletu nie trzeba opisywać &#8211; jest prawie tak dobry jak to piszą w internecie, jednak płynność interfejsu użytkownika wciąż pozostaje w tyle za pierwszym ipadem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2011/07/warsztat-programisty-androida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Epe Eater</title>
		<link>http://blog.kubiczek.eu/2010/12/epe-eater/</link>
		<comments>http://blog.kubiczek.eu/2010/12/epe-eater/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 11:02:38 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Praca, projekty, portfolio]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=398</guid>
		<description><![CDATA[Za górami, za lasami, hen w dalekiej krainie żyła sobie wesoła jaszczurka o imieniu Epe. Jak wszystkie jaszczurki z tej krainy, Epe uwielbiała wcinać kurczaki. Czerwone kurczaki, zielone kurczaki, niebieskie kurczaki. Czarne i kolczaste kurczaki trochę mniej. Różowych wcale. Wiodła spokojny żywot aż w końcu trafiła na ekrany telefonów. Z dumą prezentuję pierwszą własną produkcję [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.kubiczek.eu/wp-content/uploads/2010/12/icon_512x512-150x150.png" alt="icon_512x512" title="icon_512x512" width="150" height="150" class="alignleft size-thumbnail wp-image-408" /> Za górami, za lasami, hen w dalekiej krainie żyła sobie wesoła jaszczurka o imieniu Epe. Jak wszystkie jaszczurki z tej krainy, Epe uwielbiała wcinać kurczaki. Czerwone kurczaki, zielone kurczaki, niebieskie kurczaki. Czarne i kolczaste kurczaki trochę mniej.  Różowych wcale. </p>
<p>Wiodła spokojny żywot aż w końcu trafiła na ekrany telefonów.</p>
<p>Z dumą prezentuję pierwszą własną produkcję na telefony z systemem android – gra Epe Eater, do znalezienia w oficjalnym markecie w promocyjnej cenie $1.99. Będąca remakiem klasyki z PRLu, została wydana ponownie na miarę XXI wieku. „To prawdziwy łamacz palców, po którym długo będziesz leczył obolałe stawy. Czeka na Ciebie kilkadziesiąt poziomów, globalny ranking graczy, świetna muzyka i wielka przygoda.”</p>
<p><img src="http://blog.kubiczek.eu/wp-content/uploads/2010/12/screen1.jpg" alt="Epe Eater" title="Epe Eater" width="480" height="320" class="aligncenter size-full wp-image-404" /><img src="http://blog.kubiczek.eu/wp-content/uploads/2010/12/screen2.jpg" alt="Epe Eater  - gra na androida" title="Epe Eater  - gra na androida" width="480" height="320" class="aligncenter size-full wp-image-405" /></p>
<p>Gra została wydana pod szyldem świeżo powołanej marki Shakescreen, czyli kooperacji świetnego grafika i równie świetnego programisty. Jak to mówią – firma mała ale jara. :)</p>
<p>Aktualnie trwają prace nad wersją na telefony iPhone, jak i rozważania nad wydaniem wersji pod Windows Phone 7<del datetime="2010-12-14T11:28:45+00:00"> Phone</del>.</p>
<div style="width:425px;margin:0px auto;">

<object style="width:425px; height:344px;">
<param name="movie" value="http://www.youtube.com/v/emm8gakhx7U?version=3" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="window" />
<embed src="http://www.youtube.com/v/emm8gakhx7U?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" wmode="window" width="425" height="344"></object>

</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/12/epe-eater/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Androida zabawy z wibratorem</title>
		<link>http://blog.kubiczek.eu/2010/07/androida-zabawy-z-wibratorem/</link>
		<comments>http://blog.kubiczek.eu/2010/07/androida-zabawy-z-wibratorem/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 21:17:53 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=370</guid>
		<description><![CDATA[Zagadka. Jak w naszym programie dostać się do sterowania wibratorem? Krótkie poszukiwania i znajdujemy klasę android.os.Vibrator, ale nie ma ona publicznego konstruktora, a więc utworzenie obiektu w ten sposób: Vibrator v = new Vibrator&#40;&#41;; się nie powiedzie. Aby otrzymać obiekt Vibrator, potrzebujemy użyć metody getSystemService, którą znajdziemy w klasie android.content.Context. Vibrator v = &#40;Vibrator&#41; context.getSystemService&#40;Context.VIBRATOR_SERVICE&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Zagadka. Jak w naszym programie dostać się do sterowania wibratorem? Krótkie poszukiwania i znajdujemy klasę <code>android.os.Vibrator</code>, ale nie ma ona publicznego konstruktora, a więc utworzenie obiektu w ten sposób:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Vibrator v <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Vibrator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>się nie powiedzie. Aby otrzymać obiekt Vibrator, potrzebujemy użyć metody <code>getSystemService</code>, którą znajdziemy w klasie <a href="http://developer.android.com/reference/android/content/Context.html">android.content.Context</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Vibrator v <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Vibrator<span style="color: #009900;">&#41;</span> context.<span style="color: #006633;">getSystemService</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span>.<span style="color: #006633;">VIBRATOR_SERVICE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ale to nie wszystko, jeżeli nie chcemy otrzymać wyjątku na klatę, powinniśmy w pliku AndroidManifest.xml zaznaczyć, że aplikacja będzie używała wibratora. W tym celu do tego pliku dopisujemy:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uses-permission</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.permission.VIBRATE&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Dla jasności cały przykładowy plik AndroidManifest.xml:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;manifest</span> <span style="color: #000066;">xmlns:android</span>=<span style="color: #ff0000;">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">package</span>=<span style="color: #ff0000;">&quot;kubik.game.antris&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">android:versionCode</span>=<span style="color: #ff0000;">&quot;1&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">android:versionName</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uses-permission</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.permission.VIBRATE&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;application</span> <span style="color: #000066;">android:icon</span>=<span style="color: #ff0000;">&quot;@drawable/icon&quot;</span> <span style="color: #000066;">android:label</span>=<span style="color: #ff0000;">&quot;@string/app_name&quot;</span> <span style="color: #000066;">android:debuggable</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;activity</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;.Antris&quot;</span></span>
<span style="color: #009900;">                  <span style="color: #000066;">android:label</span>=<span style="color: #ff0000;">&quot;@string/app_name&quot;</span></span>
<span style="color: #009900;">				  <span style="color: #000066;">android:theme</span>=<span style="color: #ff0000;">&quot;@android:style/Theme.NoTitleBar.Fullscreen&quot;</span></span>
<span style="color: #009900;">				  <span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;intent-filter<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.intent.action.MAIN&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;category</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.intent.category.LAUNCHER&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/intent-filter<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/activity<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/application<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uses-sdk</span> <span style="color: #000066;">android:minSdkVersion</span>=<span style="color: #ff0000;">&quot;7&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/uses-sdk<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/manifest<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Zrobione. Teraz już możemy wibrować:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Vibrator v <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Vibrator<span style="color: #009900;">&#41;</span> context.<span style="color: #006633;">getSystemService</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span>.<span style="color: #006633;">VIBRATOR_SERVICE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
v.<span style="color: #006633;">vibrate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//wibruj pół sekundy</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/07/androida-zabawy-z-wibratorem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cykliczne wywoływanie metody w klasie</title>
		<link>http://blog.kubiczek.eu/2010/07/cykliczne-wywolywanie-metody-w-klasie/</link>
		<comments>http://blog.kubiczek.eu/2010/07/cykliczne-wywolywanie-metody-w-klasie/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 19:38:06 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=362</guid>
		<description><![CDATA[Ponieważ piszę dynamiczną grę, więc nie obejdzie się bez cyklicznego wywoływania jakiejś metody, która będzie chociażby przesuwała klocki na ekranie, wyświetlała animacje, odgrywała dźwięki czy robiła inne fascynujące rzeczy. Jak na razie odkryłem dwa sposoby na cykliczne uruchamianie wskazanej metody. Pierwszy z nich to stworzenie własnego handlera do komunikatów: class RefreshHandler extends android.os.Handler &#123; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Ponieważ piszę dynamiczną grę, więc nie obejdzie się bez cyklicznego wywoływania jakiejś metody, która będzie chociażby przesuwała klocki na ekranie, wyświetlała animacje, odgrywała dźwięki czy robiła inne fascynujące rzeczy. Jak na razie odkryłem dwa sposoby na cykliczne uruchamianie wskazanej metody.</p>
<p>Pierwszy z nich to stworzenie własnego handlera do komunikatów:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> RefreshHandler <span style="color: #000000; font-weight: bold;">extends</span> android.<span style="color: #006633;">os</span>.<span style="color: #006633;">Handler</span> <span style="color: #009900;">&#123;</span>
&nbsp;
       @Override
       <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> handleMessage<span style="color: #009900;">&#40;</span>Message msg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           NaszaKlasa.<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
&nbsp;
       <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> sleep<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">long</span> delayMillis<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">removeMessages</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
           sendMessageDelayed<span style="color: #009900;">&#40;</span>obtainMessage<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>, delayMillis<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>oraz w NaszaKlasa (nie mylić z nk.pl) odpowiedniej metody, którą handler będzie wywoływał:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NaszaKlasa extend <span style="color: #003399;">View</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> RefreshHandler mRedrawHandler <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> RefreshHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> update<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       mRedrawHandler.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Aby zainicjować cykliczne wykonywanie się metody update() należy ją pierwszy raz wywołać “ręcznie”; następnie będzie ona wywoływana co zadany interwał czasu (w przykładzie co 100ms) z poziomu klasy RefreshHandler.</p>
<p>Drugi, to użycie klasy java.util.Timer &#8211; ten sposób wydaje się początkowy bardziej oczywisty, jednak jest o tyle niewygodny, że wymaga rozszerzenia naszej klasy o TimerTask. Do mojej aplikacji wybrałem więc pierwsze rozwiązanie, jednak wcale nie będę zaskoczony, gdy okaże się, że istnieje inne, lepsze rozwiązanie. Z jednej strony dokumentacja androida mówi, że jednym z głównych celów, do których są używane handlery, jest “wykonywanie pewnych zdarzeń w przyszłości”, a ponieważ jest to klasa z API androida, więc powinna być odpowiednio zoptymalizowana do zadań, które wykonuje. Z drugiej strony, do takich celów zwykle używało się właśnie klas podobnych do klasy Timer, ale może pora na zmianę przyzwyczajeń. :)</p>
<p>O handlerach poczytacie więcej w dokumentacji: <a href="http://developer.android.com/reference/android/os/Handler.html">http://developer.android.com/reference/android/os/Handler.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/07/cykliczne-wywolywanie-metody-w-klasie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Co to jest za obiekt R i dlaczego R cannot be resolve</title>
		<link>http://blog.kubiczek.eu/2010/07/co-to-jest-za-obiekt-r-i-dlaczego-r-cannot-be-resolve/</link>
		<comments>http://blog.kubiczek.eu/2010/07/co-to-jest-za-obiekt-r-i-dlaczego-r-cannot-be-resolve/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 17:54:02 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=357</guid>
		<description><![CDATA[Gdy utworzymy w eclipse nowy projekt na androida, w głównej klasie zostanie wygenerowana metoda onCreate, która będzie wyglądała podobnie do tego co poniżej: public void onCreate&#40;Bundle savedInstanceState&#41; &#123; super.onCreate&#40;savedInstanceState&#41;; setContentView&#40;R.layout.main&#41;; &#125; Niepokoić może odwołanie do obiektu R i wyświetlany na starcie błąd R cannot be resolve. Kilka minut zajęło mi rozwiązanie tej zagadki, a więc [...]]]></description>
			<content:encoded><![CDATA[<p>Gdy utworzymy w eclipse nowy projekt na androida, w głównej klasie zostanie wygenerowana metoda <code>onCreate</code>, która będzie wyglądała podobnie do tego co poniżej:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       setContentView<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Niepokoić może odwołanie do obiektu R i wyświetlany na starcie błąd <code>R cannot be resolve</code>. Kilka minut zajęło mi rozwiązanie tej zagadki, a więc teraz w kilka minut spróbuję napisać jej wyjaśnienie :)</p>
<p>Otóż, podczas budowania projektu, automatycznie w folderze gen/ tworzona jest klasa R, zawierające statyczne definicje wszystkich obiektów, które umieścimy w folderze <code>res/</code>. Ponieważ dopiero co utworzyliśmy nowy projekt, więc klasa R nie została jeszcze wygenerowana i stąd na ekranie widzimy błąd. Wystarczy jednak zbudować projekt i po problemie.</p>
<p>Do czego służy ta klasa? Otóż dzięki niej, możemy odwoływać się do obiektów umieszczonych w folderze <code>res/</code>. Dajmy na to, że do folderu <code>res/drawable/</code> mamy wrzucony obrazek <code>ball1.png</code> &#8211; wtedy w klasie R zostanie utworzony odpowiedni wpis:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> R <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> drawable <span style="color: #009900;">&#123;</span>
           <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> ball1<span style="color: #339933;">=</span>0x7f020000<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Teraz, aby użyć gdzieś w kodzie nasz obrazek, wystarczy odwołać się do obiektu <code>R.drawable.ball1</code>, np. w taki sposób:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">ImageView i <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ImageView<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
i.<span style="color: #006633;">setImageResource</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">drawable</span>.<span style="color: #006633;">ball1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>No, to było takie wytłumaczenie totalnego laika dla laików :) Więcej o zasobach można poczytać pod adresem <a href="http://developer.android.com/guide/topics/resources/index.html">http://developer.android.com/guide/topics/resources/index.html</a> oraz w dokumentacji <a href="http://developer.android.com/reference/android/content/res/package-summary.html">http://developer.android.com/reference/android/content/res/package-summary.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/07/co-to-jest-za-obiekt-r-i-dlaczego-r-cannot-be-resolve/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>java.lang.OutOfMemoryError: PermGen space</title>
		<link>http://blog.kubiczek.eu/2010/07/java-lang-outofmemoryerror-permgen-space/</link>
		<comments>http://blog.kubiczek.eu/2010/07/java-lang-outofmemoryerror-permgen-space/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 05:33:56 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=354</guid>
		<description><![CDATA[Kolejny problem z jakim przyszło mi się zmierzyć już na starcie zabawy z androidem, był kolejny błąd, jakim raczył mnie Eclipse. W losowych momentach wyskakiwał komunikat java.lang.OutOfMemoryError: PermGen space i całe środowisko albo się wieszało, albo eclipse się zamykał. Jak na razie pomogło dopisania do eclipse.ini (znajdujący się w głównym katalogu, w którym zainstalowano eclipse) [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejny problem z jakim przyszło mi się zmierzyć już na starcie zabawy z androidem, był kolejny błąd, jakim raczył mnie Eclipse. W losowych momentach wyskakiwał komunikat <code>java.lang.OutOfMemoryError: PermGen space</code> i całe środowisko albo się wieszało, albo eclipse się zamykał.</p>
<p>Jak na razie pomogło dopisania do eclipse.ini (znajdujący się w głównym katalogu, w którym zainstalowano eclipse) ustawienia:</p>
<p><code>-XX:MaxPermSize=256m</code></p>
<p>tak wygląda obecnie u mnie cały plik eclipse.ini:</p>
<p><code>-startup<br />
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar<br />
--launcher.library<br />
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519<br />
-product<br />
org.eclipse.epp.package.jee.product<br />
--launcher.XXMaxPermSize<br />
256M<br />
-showsplash<br />
org.eclipse.platform<br />
--launcher.XXMaxPermSize<br />
256m<br />
-vmargs<br />
-Dosgi.requiredJavaVersion=1.5<br />
-XX:MaxPermSize=256m<br />
-Xms40m<br />
-Xmx512m</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/07/java-lang-outofmemoryerror-permgen-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project is missing required source folder: &#8216;gen&#8217;</title>
		<link>http://blog.kubiczek.eu/2010/07/project-is-missing-required-source-folder-gen/</link>
		<comments>http://blog.kubiczek.eu/2010/07/project-is-missing-required-source-folder-gen/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 16:31:52 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Porady i solucje]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/?p=351</guid>
		<description><![CDATA[Jest to często spotykany w Eclipse problem, podczas próby zbudowania projektu na androida &#8211; pojawiający się komunikat “Project is missing required source folder: 'gen'” pomimo tego, że taki folder na dysku istnieje. Czasami na taki błąd pomaga rzeczywiste usunięcie tego folderu z dysku i wykonanie Project -> Clean. Jednak skutecznym rozwiązaniem, które pozwoli zapomnieć o [...]]]></description>
			<content:encoded><![CDATA[<p>Jest to często spotykany w Eclipse problem, podczas próby zbudowania projektu na androida &#8211; pojawiający się komunikat <code>“Project is missing required source folder: 'gen'”</code> pomimo tego, że taki folder na dysku istnieje. Czasami na taki błąd pomaga rzeczywiste usunięcie tego folderu z dysku i wykonanie <code>Project -> Clean</code>.</p>
<p>Jednak skutecznym rozwiązaniem, które pozwoli zapomnieć o tym komunikacie jest ustawienie wersji kompilatora Javy dla projektu: <code>Project -> Properties</code>, wybieramy zakładkę <code>Java Compiler</code> i włączamy opcję <code>Enable project specific settings</code> oraz odpowiednio ustawiamy <code>Compiler compliance level</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/07/project-is-missing-required-source-folder-gen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programowanie Androida</title>
		<link>http://blog.kubiczek.eu/2010/07/programowanie-androida/</link>
		<comments>http://blog.kubiczek.eu/2010/07/programowanie-androida/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 07:30:38 +0000</pubDate>
		<dc:creator>Adam Kubiczek</dc:creator>
				<category><![CDATA[Praca, projekty, portfolio]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.kubiczek.eu/2010/07/programowanie-androida/</guid>
		<description><![CDATA[Postanowiłem poszerzyć horyzonty i zaczynam zabawę z programowaniem na androida. Powinno pójść łatwo, zważywszy że odnośnie Javy &#8211; to znam podstawową składnię języką i nic więcej :) A uczyć się, to najlepiej podczas programowania konkretnej aplikacji a nie tam jakiegoś przerabiania tutoriali. Pominę więc wszelkie nieśmiertelne “hello wordy” i zaczynam od zaprogramowania mojej ulubionej gry [...]]]></description>
			<content:encoded><![CDATA[<p>Postanowiłem poszerzyć horyzonty i zaczynam zabawę z programowaniem na androida. Powinno pójść łatwo, zważywszy że odnośnie Javy &#8211; to znam podstawową składnię języką i nic więcej :) A uczyć się, to najlepiej podczas programowania konkretnej aplikacji a nie tam jakiegoś przerabiania tutoriali. Pominę więc wszelkie nieśmiertelne “hello wordy” i zaczynam od zaprogramowania mojej ulubionej gry &#8211; tetrisa.</p>
<p>Eclipse zainstalowany, SDK zainstalowane, no to jazda.</p>
<p>Dokładną instrukcję instalacji środowiska znajdziecie pod adresem <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kubiczek.eu/2010/07/programowanie-androida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

