<?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>Gyuri Grell</title>
	<atom:link href="https://gyurigrell.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://gyurigrell.com/</link>
	<description>Random stuff about mobile development, great outdoors, and cooking. Who am I kidding, it&#039;s mostly about programming! &#x1f913;</description>
	<lastBuildDate>Tue, 08 Nov 2022 11:40:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">67453150</site>	<item>
		<title>Monarch Caterpillar</title>
		<link>https://gyurigrell.com/2022/07/monarch-caterpillar/</link>
					<comments>https://gyurigrell.com/2022/07/monarch-caterpillar/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 28 Jul 2022 19:08:38 +0000</pubDate>
				<category><![CDATA[Artistry]]></category>
		<category><![CDATA[nature]]></category>
		<category><![CDATA[photos]]></category>
		<guid isPermaLink="false">https://gyurigrell.com/?p=4052</guid>

					<description><![CDATA[<p>I planted a couple of milkweed flowers this year, and am thrilled to report that there are several caterpillars munching away on the leaves. Looking forward to seeing Monarch butterflies soon!</p>
<p>The post <a href="https://gyurigrell.com/2022/07/monarch-caterpillar/">Monarch Caterpillar</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-style-default"><a href="https://gyurigrell.com/wp-content/uploads/2022/07/PXL_20220727_225545219-scaled.jpg"><img fetchpriority="high" decoding="async" width="2560" height="1920" src="https://gyurigrell.com/wp-content/uploads/2022/07/PXL_20220727_225545219-scaled.jpg" alt="Black and yellow monarch caterpillar on the bottom of a milkweed leaf" class="wp-image-4053" srcset="https://gyurigrell.com/wp-content/uploads/2022/07/PXL_20220727_225545219-scaled.jpg 2560w, https://gyurigrell.com/wp-content/uploads/2022/07/PXL_20220727_225545219-300x225.jpg 300w" sizes="(max-width: 2560px) 100vw, 2560px" /></a><figcaption class="wp-element-caption">Black and yellow monarch caterpillar on the bottom of a milkweed leaf</figcaption></figure>



<p class="wp-block-paragraph">I planted a couple of milkweed flowers this year, and am thrilled to report that there are several caterpillars munching away on the leaves. Looking forward to seeing Monarch butterflies soon!</p>
<p>The post <a href="https://gyurigrell.com/2022/07/monarch-caterpillar/">Monarch Caterpillar</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2022/07/monarch-caterpillar/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4052</post-id>	</item>
		<item>
		<title>Eyes Realize Real Lies</title>
		<link>https://gyurigrell.com/2019/04/eyes-realize-real-lies/</link>
					<comments>https://gyurigrell.com/2019/04/eyes-realize-real-lies/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sun, 28 Apr 2019 01:05:54 +0000</pubDate>
				<category><![CDATA[Artistry]]></category>
		<guid isPermaLink="false">https://gyurigrell.com/?p=791</guid>

					<description><![CDATA[<p>Found on a bridge leading to the Sanderson Brook Waterfall.</p>
<p>The post <a href="https://gyurigrell.com/2019/04/eyes-realize-real-lies/">Eyes Realize Real Lies</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" width="3000" height="2250" src="https://gyurigrell.com/wp-content/uploads/2019/04/p41905153351678962818948545.jpg" alt="Graffity writing on cracked concrete: &quot;Eyes realize real lies&quot;" class="wp-image-790" srcset="https://gyurigrell.com/wp-content/uploads/2019/04/p41905153351678962818948545.jpg 3000w, https://gyurigrell.com/wp-content/uploads/2019/04/p41905153351678962818948545-300x225.jpg 300w, https://gyurigrell.com/wp-content/uploads/2019/04/p41905153351678962818948545-768x576.jpg 768w, https://gyurigrell.com/wp-content/uploads/2019/04/p41905153351678962818948545-1024x768.jpg 1024w, https://gyurigrell.com/wp-content/uploads/2019/04/p41905153351678962818948545-1100x825.jpg 1100w" sizes="(max-width: 3000px) 100vw, 3000px" /></figure>



<p class="wp-block-paragraph">Found on a bridge leading to the <a href="https://goo.gl/maps/SN7wXamstf8Tefbh8">Sanderson Brook Waterfall</a>.</p>
<p>The post <a href="https://gyurigrell.com/2019/04/eyes-realize-real-lies/">Eyes Realize Real Lies</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2019/04/eyes-realize-real-lies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">791</post-id>	</item>
		<item>
		<title>Ryan Park</title>
		<link>https://gyurigrell.com/2019/03/ryan-park/</link>
					<comments>https://gyurigrell.com/2019/03/ryan-park/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 18 Mar 2019 12:04:52 +0000</pubDate>
				<category><![CDATA[Artistry]]></category>
		<guid isPermaLink="false">https://gyurigrell.com/?p=742</guid>

					<description><![CDATA[<p>The post <a href="https://gyurigrell.com/2019/03/ryan-park/">Ryan Park</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" width="3000" height="2250" src="https://gyurigrell.com/wp-content/uploads/2019/03/img_20190317_182753-effects3775435494500621275.jpg" alt="" class="wp-image-741" srcset="https://gyurigrell.com/wp-content/uploads/2019/03/img_20190317_182753-effects3775435494500621275.jpg 3000w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190317_182753-effects3775435494500621275-300x225.jpg 300w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190317_182753-effects3775435494500621275-768x576.jpg 768w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190317_182753-effects3775435494500621275-1024x768.jpg 1024w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190317_182753-effects3775435494500621275-1100x825.jpg 1100w" sizes="(max-width: 3000px) 100vw, 3000px" /><figcaption>Ryan Park</figcaption></figure>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://gyurigrell.com/2019/03/ryan-park/">Ryan Park</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2019/03/ryan-park/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">742</post-id>	</item>
		<item>
		<title>King/Benson Preserve</title>
		<link>https://gyurigrell.com/2019/03/king-benson-preserve/</link>
					<comments>https://gyurigrell.com/2019/03/king-benson-preserve/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sat, 16 Mar 2019 13:14:37 +0000</pubDate>
				<category><![CDATA[Artistry]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[rhodeisland]]></category>
		<guid isPermaLink="false">https://gyurigrell.com/?p=739</guid>

					<description><![CDATA[<p>The post <a href="https://gyurigrell.com/2019/03/king-benson-preserve/">King/Benson Preserve</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="2250" height="3000" src="https://gyurigrell.com/wp-content/uploads/2019/03/img_20190309_1617563049075496850986956.jpg" alt="" class="wp-image-738" srcset="https://gyurigrell.com/wp-content/uploads/2019/03/img_20190309_1617563049075496850986956.jpg 2250w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190309_1617563049075496850986956-225x300.jpg 225w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190309_1617563049075496850986956-768x1024.jpg 768w, https://gyurigrell.com/wp-content/uploads/2019/03/img_20190309_1617563049075496850986956-1100x1467.jpg 1100w" sizes="auto, (max-width: 2250px) 100vw, 2250px" /><figcaption>On the loop at the King/Benson Preserve</figcaption></figure>
<p>The post <a href="https://gyurigrell.com/2019/03/king-benson-preserve/">King/Benson Preserve</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2019/03/king-benson-preserve/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">739</post-id>	</item>
		<item>
		<title>A Simple Tip for developers writing both Kotlin &#038; Swift</title>
		<link>https://gyurigrell.com/2019/03/a-simple-tip-for-developers-writing-both-kotlin-swift/</link>
					<comments>https://gyurigrell.com/2019/03/a-simple-tip-for-developers-writing-both-kotlin-swift/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 15 Mar 2019 16:02:13 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[swift]]></category>
		<guid isPermaLink="false">https://gyurigrell.com/?p=705</guid>

					<description><![CDATA[<p>In your day to day programming, do you jump back and forth between writing Kotlin and Swift code as I do? You&#8217;ve also probably noticed that you develop muscle memory as you type the keywords. The two languages are quite similar and this lets me be quite productive in both. Yet, there is one set &#8230; <a href="https://gyurigrell.com/2019/03/a-simple-tip-for-developers-writing-both-kotlin-swift/" class="more-link">Continue reading <span class="screen-reader-text">A Simple Tip for developers writing both Kotlin &#038; Swift</span> <span class="meta-nav">&#8594;</span></a></p>
<p>The post <a href="https://gyurigrell.com/2019/03/a-simple-tip-for-developers-writing-both-kotlin-swift/">A Simple Tip for developers writing both Kotlin &#038; Swift</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-drop-cap wp-block-paragraph">In your day to day programming, do you jump back and forth between writing Kotlin and Swift code as I do? You&#8217;ve also probably noticed that you develop muscle memory as you type the keywords. The two languages are quite similar and this lets me be quite productive in both. Yet, there is one set of keywords in particular that gets me every time: <g class="gr_ gr_167 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="167" data-gr-id="167">Kotlin&#8217;s </g><code class="" data-line="">val</code><g class="gr_ gr_167 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="167" data-gr-id="167"> vs</g> <g class="gr_ gr_168 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="168" data-gr-id="168">Swift&#8217;s </g><code class="" data-line="">let</code><g class="gr_ gr_168 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="168" data-gr-id="168">.</g> I often end up <g class="gr_ gr_277 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="277" data-gr-id="277">typing </g><code class="" data-line="">let</code><g class="gr_ gr_277 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="277" data-gr-id="277"> for</g> Kotlin code, <g class="gr_ gr_269 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="269" data-gr-id="269">or </g><code class="" data-line="">val</code><g class="gr_ gr_269 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="269" data-gr-id="269"> for</g> Swift code. </p>



<span id="more-705"></span>



<p class="wp-block-paragraph">Since I use <g class="gr_ gr_22 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace" id="22" data-gr-id="22">jetBrains</g> products for both languages (IntelliJ or Android Studio for Kotlin, and AppCode for Swift), I&#8217;ve been able to take advantage of their Live Templates feature to automatically and seamlessly correct me if I type the wrong keyword. Here&#8217;s what the setup looks like&#8230; Important to note that the &#8216;Expand with&#8217; setting defaults to Tab, but I need it to be Space.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1244" height="680" src="https://i2.wp.com/gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-2.54.44-PM.png?fit=640%2C350&amp;ssl=1" alt="" class="wp-image-709" srcset="https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-2.54.44-PM.png 1244w, https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-2.54.44-PM-300x164.png 300w, https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-2.54.44-PM-768x420.png 768w, https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-2.54.44-PM-1024x560.png 1024w" sizes="auto, (max-width: 1244px) 100vw, 1244px" /><figcaption>The setup looks like this for IntelliJ or Android Studio.</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1520" height="476" src="https://i1.wp.com/gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-10.58.16-AM.png?fit=640%2C201&amp;ssl=1" alt="" class="wp-image-710" srcset="https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-10.58.16-AM.png 1520w, https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-10.58.16-AM-300x94.png 300w, https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-10.58.16-AM-768x241.png 768w, https://gyurigrell.com/wp-content/uploads/2019/03/Screen-Shot-2019-03-13-at-10.58.16-AM-1024x321.png 1024w" sizes="auto, (max-width: 1520px) 100vw, 1520px" /><figcaption>And it looks like this for AppCode.</figcaption></figure></div>



<p class="wp-block-paragraph">Let me know in the comments if this helped, and if there are other cases you&#8217;ve run into!</p>
<p>The post <a href="https://gyurigrell.com/2019/03/a-simple-tip-for-developers-writing-both-kotlin-swift/">A Simple Tip for developers writing both Kotlin &#038; Swift</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2019/03/a-simple-tip-for-developers-writing-both-kotlin-swift/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">705</post-id>	</item>
		<item>
		<title>&#8216;lateinit&#8217; modifier is not allowed on properties of a type with nullable</title>
		<link>https://gyurigrell.com/2018/08/lateinit-modifier-is-not-allowed/</link>
					<comments>https://gyurigrell.com/2018/08/lateinit-modifier-is-not-allowed/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sun, 26 Aug 2018 02:13:12 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[kotlin]]></category>
		<guid isPermaLink="false">http://gyurigrell.com/?p=523</guid>

					<description><![CDATA[<p>While developing an abstract &#038; generic base class where the generic parameter defines the type of an abstract field. The field would be initialized by the inherited classes, and so I applied the 'lateinit' modifier to it. This cause an interesting error:'lateinit' modifier is not allowed on properties of a type with nullable</p>
<p>The post <a href="https://gyurigrell.com/2018/08/lateinit-modifier-is-not-allowed/">&#8216;lateinit&#8217; modifier is not allowed on properties of a type with nullable</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-drop-cap wp-block-paragraph">I was developing an abstract &amp; generic base class where the generic parameter defines the type of an abstract field. This field would be initialized by inherited classes, so I applied the <code class="" data-line="">&#039;lateinit&#039;</code> modifier to it which caused an interesting error: <code class="" data-line="">&#039;lateinit&#039; modifier is not allowed on properties  of a type with nullable</code> </p>



<span id="more-523"></span>



<p class="wp-block-paragraph">The class itself looked a little like this:</p>



<pre class="wp-block-code line-numbers, lang-kotlin"><code class="" data-line="">abstract class Block&lt;State&gt;() {
    ...
    protected lateinit var state: State
    ...
}</code></pre>



<p class="wp-block-paragraph">So it turns out, when you don&#8217;t apply any bounds to a generic parameter, it defaults to&nbsp;<code class="" data-line="">Any?</code>. Therefore the compiler was really seeing this:</p>



<pre class="wp-block-code line-numbers, lang-kotlin"><code class="" data-line="">abstract class Block&lt;State: Any?&gt;() {
    ...
    protected lateinit var state: State
    ...
}</code></pre>



<p class="wp-block-paragraph">If you know the rules for&nbsp;<code class="" data-line="">lateinit</code>, you&#8217;ll remember that it cannot be used with optional values, and so I was getting the error. The solution was to apply a non-optional bounds to the <code class="" data-line="">State</code> parameter, like this:</p>



<pre class="wp-block-code line-numbers, lang-kotlin"><code class="" data-line="">abstract class Block&lt;State: Any&gt;() {
    ...
    protected lateinit var state: State
    ...
}</code></pre>



<p class="wp-block-paragraph">Everything worked great after this small change.</p>
<p>The post <a href="https://gyurigrell.com/2018/08/lateinit-modifier-is-not-allowed/">&#8216;lateinit&#8217; modifier is not allowed on properties of a type with nullable</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2018/08/lateinit-modifier-is-not-allowed/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">523</post-id>	</item>
		<item>
		<title>Tracking install sources for Android apps</title>
		<link>https://gyurigrell.com/2012/02/tracking-install-sources-for-android-apps/</link>
					<comments>https://gyurigrell.com/2012/02/tracking-install-sources-for-android-apps/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Tue, 21 Feb 2012 15:55:09 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google play]]></category>
		<guid isPermaLink="false">http://gyurigrell.com/?p=5</guid>

					<description><![CDATA[<p>Have you ever wanted to have a better idea of what&#8217;s the best source of your app installs? There&#8217;s information around the web on how to do it, but spread out over various sites, so I decided to write this post to consolidate the information. Starting with Android 1.6, the Android Market&#8217;s emits a broadcast &#8230; <a href="https://gyurigrell.com/2012/02/tracking-install-sources-for-android-apps/" class="more-link">Continue reading <span class="screen-reader-text">Tracking install sources for Android apps</span> <span class="meta-nav">&#8594;</span></a></p>
<p>The post <a href="https://gyurigrell.com/2012/02/tracking-install-sources-for-android-apps/">Tracking install sources for Android apps</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-drop-cap wp-block-paragraph">Have you ever wanted to have a better idea of what&#8217;s the best source of your app installs? There&#8217;s information around the web on how to do it, but spread out over various sites, so I decided to write this post to consolidate the information.</p>



<p class="wp-block-paragraph">Starting with Android 1.6, the Android Market&#8217;s emits a broadcast Intent named&nbsp;<code class="" data-line="">com.android.vending.INSTALL_REFERRER</code>&nbsp;whenever certain parameters are added to the market url. Note that web version of the Market also passes these parameters to your devices upon install. Since the parameters need to follow the Google Analytics referral link format, Google provides a <a rel="noreferrer noopener" href="http://code.google.com/apis/analytics/docs/mobile/android.html#android-market-tracking" target="_blank">simple tool</a> for generating these urls, or you could use a copy of <a rel="noreferrer noopener" href="http://goo.gl/sFK60" target="_blank">my shared Google spreadsheet</a> that I use to keep track of all my campaigns. Here&#8217;s a description for the important parameters:</p>



<span id="more-5"></span>



<figure class="wp-block-table"><table><tbody><tr><td>Parameter</td><td>Description</td></tr><tr><td>utm_campaign</td><td>Used for keyword analysis. Use&nbsp;<strong>utm_campaign&nbsp;</strong>to identify a specific product promotion or strategic campaign.&nbsp;<br><em>Example</em>:&nbsp;<code class="" data-line="">utm_campaign=spring_sale</code></td></tr><tr><td>utm_medium</td><td>Use&nbsp;<strong>utm_medium</strong>&nbsp;to identify a medium such as email or cost-per- click.&nbsp;<br><em>Example</em>:&nbsp;<code class="" data-line="">utm_medium=cpc</code></td></tr><tr><td>utm_source</td><td>Use&nbsp;<strong>utm_source</strong>&nbsp;to identify a search engine, newsletter name, or other source.&nbsp;<br><em>Example</em>:&nbsp;<code class="" data-line="">utm_source=google</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">So now you have a url with information that is broadcast by the Android Market when your app is installed. The next step is to capture that information inside your app and submit them to your mobile analytics provider (Google Analytics, Flurry, Localytics, etc). The way to do that is to first register a BroadcastReceiver in your AndroidManifest.xml. You&#8217;ll need to handle the&nbsp;<code class="" data-line="">com.android.vending.INSTALL_REFERRER</code>&nbsp;broadcast like this:</p>



<pre class="wp-block-code line-numbers language-xml"><code class="" data-line="">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
 ...&gt;
    &lt;application ...&gt;
        &lt;activity ... /&gt;

        &lt;!-- Android Market install receiver --&gt;
        &lt;receiver
            android:exported=&quot;true&quot;
            android:name=&quot;com.your.namespace.InstallReferrerReceiver&quot; &gt;
            &lt;intent-filter &gt;
                &lt;action android:name=&quot;com.android.vending.INSTALL_REFERRER&quot; /&gt;
            &lt;/intent-filter&gt;
        &lt;/receiver&gt;
    &lt;/application&gt;
&lt;/manifest&gt;</code></pre>



<p class="wp-block-paragraph">Next, we need the implement the class that handles the broadcast. All the class does is receives the&nbsp;<code class="" data-line="">INSTALL_REFERRER</code>&nbsp;<code class="" data-line="">BroadcastIntent</code>, takes the <code class="" data-line="">referrer</code> extra from the intent and breaks it down into key/value pairs for submitting it to the analytics package. (<code class="" data-line="">AnalyticsTrackerFactory</code> is just my generic wrapper for analytics; you can call your own directly instead).</p>



<pre class="wp-block-code line-numbers language-java"><code class="" data-line="">public class InstallReferrerReceiver extends BroadcastReceiver {
	private static final String TAG = &quot;InstallReferrerReceiver&quot;;

	@Override
	public void onReceive(Context context, Intent intent) {
		HashMap&lt;String, String&gt; values = new HashMap&lt;String, String&gt;();
		try {
			if (intent.hasExtra(&quot;referrer&quot;)) {
				String referrers&#091;] = intent.getStringExtra(&quot;referrer&quot;).split(&quot;&amp;&quot;);
				for (String referrerValue : referrers) {
					String keyValue&#091;] = referrerValue.split(&quot;=&quot;);
					values.put(URLDecoder.decode(keyValue&#091;0]), URLDecoder.decode(keyValue&#091;1]));
				}
			}
		} catch (Exception e) {
		}

		Log.d(TAG, &quot;referrer: &quot; + values);
		AnalyticsTrackerFactory.getTracker(context).event(&quot;Installed&quot;, values);
	}
}</code></pre>



<p class="wp-block-paragraph">So that&#8217;s all there is to it! Just take some vary basic steps and small changes to your app to easily track who&#8217;s referring downloads of your app.</p>
<p>The post <a href="https://gyurigrell.com/2012/02/tracking-install-sources-for-android-apps/">Tracking install sources for Android apps</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2012/02/tracking-install-sources-for-android-apps/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5</post-id>	</item>
		<item>
		<title>&#8220;Incorrect AVA format&#8221; when creating a signing key</title>
		<link>https://gyurigrell.com/2012/02/incorrect-ava-format-when-creating-a-signing-key/</link>
					<comments>https://gyurigrell.com/2012/02/incorrect-ava-format-when-creating-a-signing-key/#comments</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Tue, 14 Feb 2012 15:32:32 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[android]]></category>
		<guid isPermaLink="false">http://gyurigrell.com/?p=6</guid>

					<description><![CDATA[<p>Have you ever run into the error &#8220;Incorrect AVA format&#8221; when trying to sign an Android APK with a new key? It turns out this useless error more than likely means that you have used some illegal character in the signing data. In my case, I had used a comma in the company name which &#8230; <a href="https://gyurigrell.com/2012/02/incorrect-ava-format-when-creating-a-signing-key/" class="more-link">Continue reading <span class="screen-reader-text">&#8220;Incorrect AVA format&#8221; when creating a signing key</span> <span class="meta-nav">&#8594;</span></a></p>
<p>The post <a href="https://gyurigrell.com/2012/02/incorrect-ava-format-when-creating-a-signing-key/">&#8220;Incorrect AVA format&#8221; when creating a signing key</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignright"><img loading="lazy" decoding="async" width="300" height="116" src="http://gyurigrell.com/wp-content/uploads/2012/02/incorrectAVA.png" alt="incorrectAVA" class="wp-image-27"/></figure></div>



<p class="has-drop-cap wp-block-paragraph">Have you ever run into the error &#8220;Incorrect AVA format&#8221; when trying to sign an Android APK with a new key? It turns out this useless error more than likely means that you have used some illegal character in the signing data. In my case, I had used a comma in the company name which isn&#8217;t allowed for some reason. Just remove any extra characters and you should be good to go!</p>



<p class="wp-block-paragraph">EDIT: Great comment below from Adam M Dutko:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Put a \ before the commas and it will work. Here is an example: OU=Test Company\, LLC</p></blockquote>
<p>The post <a href="https://gyurigrell.com/2012/02/incorrect-ava-format-when-creating-a-signing-key/">&#8220;Incorrect AVA format&#8221; when creating a signing key</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2012/02/incorrect-ava-format-when-creating-a-signing-key/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6</post-id>	</item>
		<item>
		<title>Adding formatted HTML text to your Android app</title>
		<link>https://gyurigrell.com/2010/06/adding-formatted-html-text-to-your-android-app/</link>
					<comments>https://gyurigrell.com/2010/06/adding-formatted-html-text-to-your-android-app/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 14 Jun 2010 14:18:32 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[assets]]></category>
		<category><![CDATA[html]]></category>
		<guid isPermaLink="false">http://gyurigrell.com/?p=8</guid>

					<description><![CDATA[<p>To help make our Android applications look even more professional, we can include HTML formatted text and display it in a WebView. Here&#8217;s the simplest way I&#8217;ve found to have local HTML, image and style files and display them. This is the same process I use to display help in Grandma Jong. First, I&#8217;ve stored &#8230; <a href="https://gyurigrell.com/2010/06/adding-formatted-html-text-to-your-android-app/" class="more-link">Continue reading <span class="screen-reader-text">Adding formatted HTML text to your Android app</span> <span class="meta-nav">&#8594;</span></a></p>
<p>The post <a href="https://gyurigrell.com/2010/06/adding-formatted-html-text-to-your-android-app/">Adding formatted HTML text to your Android app</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="553" height="161" src="http://gyurigrell.com/wp-content/uploads/2010/06/HelpTextRender.png" alt="HelpTextRender" class="wp-image-31" srcset="https://gyurigrell.com/wp-content/uploads/2010/06/HelpTextRender.png 553w, https://gyurigrell.com/wp-content/uploads/2010/06/HelpTextRender-300x87.png 300w" sizes="auto, (max-width: 553px) 100vw, 553px" /></figure></div>



<p class="has-drop-cap wp-block-paragraph">To help make our Android applications look even more professional, we can include HTML formatted text and display it in a <code class="" data-line="">WebView</code>. Here&#8217;s the simplest way I&#8217;ve found to have local HTML, image and style files and display them. This is the same process I use to display help in Grandma Jong.</p>



<p class="wp-block-paragraph">First, I&#8217;ve stored all my files in a subfolder of assets. This will make it easier to load the HTML, and via some built-in functionality in Android, it will load all assets from the same folder as well. Here&#8217;s a screenshot of the assets folder:</p>



<span id="more-8"></span>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="241" height="130" src="http://gyurigrell.com/wp-content/uploads/2010/06/AssetsFolder.png" alt="AssetsFolder" class="wp-image-32"/></figure></div>



<p class="wp-block-paragraph">Here I have the HTML file, along with the referenced images. Now a glance into what the HTML looks like:</p>



<pre class="wp-block-preformatted">&lt;p&gt;<br>&lt;img src="bomb.png" align="left" style="margin-right:1em;" /&gt; Don't despair! Bomb tiles let you clear blocked tiles; just select the tile to remove, then select a bomb tile on the left. A matching tile will be removed from the level.<br>&lt;/p&gt;</pre>



<p class="wp-block-paragraph">The <code class="" data-line="">&lt;img&gt;</code> tag just has a straightforward reference to the image file, since when loading the HTML, the passed in path will be taken as the root path and all references are valid from there. Finally, there&#8217;s the <code class="" data-line="">WebView</code> code needed to load the HTML from the assets folder. Once you have a reference to a <code class="" data-line="">WebView</code> instance, all you need to do is call the <code class="" data-line="">loadUrl</code> method on it:</p>



<pre class="wp-block-preformatted">webViewInstance.loadUrl("file:///android_asset/help/help.html");</pre>



<p class="wp-block-paragraph">The &#8220;<code class="" data-line="">file:///android_asset</code>&#8221; path is a special one that points to the assets folder in your project. That&#8217;s all there is to it. Although I haven&#8217;t demonstrated it here, you can also store and load style and javascript files the same way.</p>
<p>The post <a href="https://gyurigrell.com/2010/06/adding-formatted-html-text-to-your-android-app/">Adding formatted HTML text to your Android app</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2010/06/adding-formatted-html-text-to-your-android-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8</post-id>	</item>
		<item>
		<title>Android Icon Design Guidelines Updated</title>
		<link>https://gyurigrell.com/2010/04/android-icon-design-guidelines-updated/</link>
					<comments>https://gyurigrell.com/2010/04/android-icon-design-guidelines-updated/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 14:23:37 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[icons]]></category>
		<guid isPermaLink="false">http://gyurigrell.com/?p=10</guid>

					<description><![CDATA[<p>The Android Icon Design Guidelines have been updated to describe the latest design styles of iconography in versions 2.0+. The styles have changed dramatically from pre-2.0 days, so be sure to read the whole document. There are also some nice Photoshop templates that can be download from here. (via Roman Nurik)</p>
<p>The post <a href="https://gyurigrell.com/2010/04/android-icon-design-guidelines-updated/">Android Icon Design Guidelines Updated</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-35 aligncenter" alt="IconGraphic_Materials" src="http://gyurigrell.com/wp-content/uploads/2010/04/IconGraphic_Materials.png" width="515" height="248" srcset="https://gyurigrell.com/wp-content/uploads/2010/04/IconGraphic_Materials.png 515w, https://gyurigrell.com/wp-content/uploads/2010/04/IconGraphic_Materials-300x144.png 300w" sizes="auto, (max-width: 515px) 100vw, 515px" /></p>
<p>The Android <a href="http://developer.android.com/intl/zh-TW/guide/practices/ui_guidelines/icon_design.html">Icon Design Guidelines</a> have been updated to describe the latest design styles of iconography in versions 2.0+. The styles have changed dramatically from pre-2.0 days, so be sure to read the whole document.</p>
<p>There are also some nice Photoshop templates that can be download from <a href="http://developer.android.com/shareables/icon_templates-v2.0.zip">here</a>.</p>
<p>(via <a href="http://twitter.com/romannurik/status/11398499217">Roman Nurik</a>)</p>
<p>The post <a href="https://gyurigrell.com/2010/04/android-icon-design-guidelines-updated/">Android Icon Design Guidelines Updated</a> appeared first on <a href="https://gyurigrell.com">Gyuri Grell</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gyurigrell.com/2010/04/android-icon-design-guidelines-updated/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10</post-id>	</item>
	</channel>
</rss>
