<?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>stealthcopter.com &#187; Android</title>
	<atom:link href="http://www.stealthcopter.com/blog/category/android/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stealthcopter.com/blog</link>
	<description>Android, Linux, Python and stealthcopters</description>
	<lastBuildDate>Sat, 24 Jul 2010 00:01:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Google updates its Android Market Developer Distribution Agreement</title>
		<link>http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 00:01:54 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=948</guid>
		<description><![CDATA[Google have just issued an update to the Android Market Developer Distribution Agreement, which if you do not accept within 30 days your applications will be removed from the market. The Highlights I will just emphasise the things that I believe will be of most interest (to me) and other developers (I imagine), might save [...]]]></description>
			<content:encoded><![CDATA[<p>Google have just issued an update to the <strong>Android Market Developer Distribution Agreement</strong>, which if you do not accept within 30 days your applications will be removed from the market. </p>
<div id="attachment_949" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/market/" rel="attachment wp-att-949"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/market-600x178.png" alt="Updated Android Market Developer Distribution Agreement" title="Updated Android Market Developer Distribution Agreement" width="600" height="178" class="size-medium wp-image-949" /></a><p class="wp-caption-text">Updated Android Market Developer Distribution Agreement</p></div>
<p><strong>The Highlights</strong><br />
I will just emphasise the things that I believe will be of most interest (to me) and other developers (I imagine), might save some of you the trouble of having to read it all:</p>
<p><strong>3.2 A Transaction Fee, as defined below, will be charged on the sales price and apportioned to the Payment Processor and, if one exists, the Authorized Carrier.</strong> Looks like some carriers are going to be getting a cut of developers profits, would be interested to see if this is an incentive for the networks by google or if the networks have been putting pressure on google for a cut of the profits. It isn&#8217;t clear if this will come out of the transaction free or our own cut, I would imagine it is the latter but will probably be clarified in the future dependant on service provider.</p>
<p>Annoyingly the link that google provid in 3.2 is broken (<a href="http://www.android.com/support/market/bin/answer.py?answer=112622">http://www.android.com/support/market/bin/answer.py?answer=112622</a>) with regards the pricing arrangement.</p>
<p><strong>4.5 Non-Compete. You may not use the Market to distribute or make available any Product whose primary purpose is to facilitate the distribution of Products outside of the Market.</strong></p>
<p>Looks like google are a little concerned about alternative markets (good if not slightly dated article on these market apps <a href="http://www.appnoodle.com/2009/08/alternatives-to-the-official-android-market/">here</a>). This could also be related to the recent developments in china with regards android&#8230; (<a href="http://www.androidpolice.com/2010/07/22/oh-snap-chinese-carriers-removing-google-from-android-equation/">androidpolice</a>)</p>
<p><strong>7. Product Takedowns</strong> Some regulations about providing support/refunds after taking down an app, and that google may take down your app if it is: &#8220;defective, malicious, infringes Intellectual Property Rights of another person, defames, infringes a third party&#8217;s right of publicity or privacy, or does not comply with applicable laws or rgeulations&#8221;</p>
<p><strong>Minor points</strong></p>
<ul>
<li>Your app may be used for publicity or as a demonstration, sounds like agreeing to free advertising&#8230; not a bad thing if they choose your app!</li>
<li>Several additions to help the buyers get refunds from shoddy or unsupported applications/developers.</li>
<li>Notification of google having the right to order the apps in searches how it wants</li>
<li><strong>12.1 a</strong> &#8211; google doesn&#8217;t plan on taking the blame if you cause a death with your app somehow&#8230;</li>
<li><strong>13.1 + 13.2</strong> &#8211; we don&#8217;t blame google for mistakes/crimes we commit and will cover their legal costs if required&#8230;</li>
</ul>
<p><strong>Feedback and full agreement</strong></p>
<p>Those are what I consider to be the most important things, please comment if you think I missed anything or interpreted something incorrectly. The full distribution agreement follows below:</p>
<blockquote><p>
Android market developer distribution agreement<br />
Definitions</p>
<p>Authorized Carrier: A mobile network operator who is authorized to receive a distribution fee for Products that are sold to users of Devices on its network.</p>
<p>Brand Features: the trade names, trade marks, service marks, logos, domain names, and other distinctive brand features of each party, respectively, as owned by (or licensed to) such party from time to time.</p>
<p>Developer or You: Any person or company who is registered and approved by the Market to distribute Products in accordance with the terms of this Agreement.</p>
<p>Developer Account: A publishing account issued to Developers that enables the distribution of Products via the Market.</p>
<p>Device: Any mobile device that can access the Market, as defined herein</p>
<p>Google: Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.</p>
<p>Intellectual Property Rights: means all copyright; moral rights; patent rights; trade or service marks; design right; semiconductor topography rights; rights in or relating to databases; rights in or relating to confidential information; rights in relation to domain names; privacy or publicity rights and any other intellectual property rights (registered or unregistered) throughout the world; including all rights of reversion and rights to any applications and pending registrations and the right to sue for and recover damages for past infringements.</p>
<p>Market: The Android Market site operated by Google, where Developers can distribute Products directly to users of Devices.</p>
<p>Payment Processor(s): Any party authorized by Google to provide payment processing services that enable Developers with optional Payment Accounts to charge Device users for Products distributed via the Market.</p>
<p>Payment Account: A financial account issued by a Payment Processor to a Developer that authorizes the Payment Processor to collect and remit payments on the Developer&#8217;s behalf for Products sold via the Market. Developers must be approved by a Payment Processor for a Payment Account and maintain their account in good standing to charge for Products distributed in the Market.</p>
<p>Products: Software, content and digital materials created for Devices in accordance with the Android SDK and distributed via the Market.</p>
<p>1. Introduction</p>
<p>1.1 The Market is a publicly available site on which Android Developers can distribute Products for Devices. In order to distribute Products on the Market, You must acquire and maintain a valid Developer Account.</p>
<p>1.2 If You want to charge a fee for Your Products, You must also acquire and maintain a valid Payment Account from an authorized Payment Processor.</p>
<p>2. Accepting this Agreement</p>
<p>2.1 This Android Market Developer Distribution Agreement (&#8220;Agreement&#8221;) forms a legally binding contract between You and Google in relation to Your use of the Market to distribute Products. In order to use the Market to distribute Products, You must first agree to this Agreement by clicking to accept where this option is made available to You. You may not distribute Products on the Market if You do not accept this Agreement.</p>
<p>2.2 You may not use the Market to distribute Products and may not accept the Agreement unless You are verified as a Developer in good standing. This Agreement will automatically terminate if You are (a) not a Developer in good standing, or (b) a person or entity barred from using Android software under the laws of the United States or other countries including the country in which You are resident or from which You use the Android software.</p>
<p>2.3 If You are agreeing to be bound by this Agreement on behalf of Your employer or other entity, You represent and warrant that You have full legal authority to bind Your employer or such entity to this Agreement. If You do not have the requisite authority, You may not accept the Agreement or use the Market on behalf of Your employer or other entity.</p>
<p>3. Pricing and Payments.</p>
<p>3.1 This Agreement covers both Products You choose to distribute for free and Products for which You charge a fee (once payment processing is enabled on the Market). In order to charge a fee for Your Products, You must have a valid Payment Account under a separate agreement with a Payment Processor. If You already have a Payment Account with a Payment Processor before signing up for the Market, then the terms of this Agreement shall supersede Your Payment Account terms and condition for Products sold via the Market.<br />
You may set the price for Your Products in the currencies permitted by the Payment Processor. The Market may display to users the price of Products in their native currency, but it is not responsible for the accuracy of currency rates or conversion</p>
<p>3.2 The price You set for Products will determine the amount of payment You will receive. A Transaction Fee, as defined below, will be charged on the sales price and apportioned to the Payment Processor and, if one exists, the Authorized Carrier. The remainder (sales price less Transaction Fee) will be remitted to You. The &#8220;Transaction Fee&#8221; is set forth at http://www.android.com/support/market/bin/answer.py?answer=112622 and may be revised by Google from time to time. Developer is responsible for determining if a Product is taxable and the applicable tax rate for the Payment Processor to collect for each taxing jurisdiction where Products are sold. Developer is responsible for remitting taxes to the appropriate taxing authority.</p>
<p>3.3 You may also choose to distribute Products for free. If the Product is free, You will not be charged a Transaction Fee. You may not collect future charges from users for copies of the Products that those users were initially allowed to download for free. This is not intended to prevent distribution of free trial versions of the Product with an &#8220;upsell&#8221; option to obtain the full version of the Product: Such free trials for Products are encouraged. However, if You want to collect fees after the free trial expires, You must collect all fees for the full version of the Product through the Payment Processor on the Market. In this Agreement, &#8220;free&#8221; means there are no charges or fees of any kind for use of the Product. All fees received by Developers for Products distributed via the Market must be processed by the Market&#8217;s Payment Processor.</p>
<p>3.4 Special Refund Requirements. The Payment Processor&#8217;s standard terms and conditions regarding refunds will apply except the following terms apply to Your distribution of Products on the Market.<br />
Products that can be previewed by the buyer (such as ringtones and wallpapers): No refund is required or allowed.<br />
Products that cannot be previewed by the buyer (such as applications): You authorize Google to give the buyer a full refund of the Product price if the buyer requests the refund within 48 hours after purchase.<br />
3.5 You Support Your Product. You will be solely responsible for support and maintenance of Your Products and any complaints about Your Products. Your contact information will be displayed in each application detail page and made available to users for customer support purposes. Failure to provide adequate support for Your Products may result in low Product ratings, less prominent product exposure, low sales and billing disputes. Except in cases when multiple disputes are initiated by a user with abnormal dispute history, billing disputes received by Payment Processor for Products sold for less than $10 may be automatically charged back to the Developer, in addition to any handling fees charged by the Payment Processor. Chargeback requests for Products $10 or more will be handled in accordance with the Payment Processor&#8217;s standard policy.</p>
<p>3.6 Reinstalls. Users are allowed unlimited reinstalls of each application distributed via the Market, provided however that if You remove a Product(s) from the Market pursuant to clauses (i), (ii), (iii) or (iv) of Section 7.1, such Product(s) shall be removed from all portions of the Market and users shall no longer have a right or ability to reinstall the affected Products.</p>
<p>4. Use of the Market by You</p>
<p>4.1 Except for the license rights granted by You in Section 5 below, Google agrees that it obtains no right, title or interest from You (or Your licensors) under this Agreement in or to any of Products, including any intellectual property rights which subsist in those applications.</p>
<p>4.2 You agree to use the Market only for purposes that are permitted by (a) this Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).</p>
<p>4.3 You agree that if You use the Market to distribute Products, You will protect the privacy and legal rights of users. If the users provide You with, or Your Product accesses or uses, user names, passwords, or other login information or personal information, You must make the users aware that the information will be available to Your Product, and You must provide legally adequate privacy notice and protection for those users. Further, Your Product may only use that information for the limited purposes for which the user has given You permission to do so. If Your Product stores personal or sensitive information provided by users, it must do so securely and only for as long as it is needed. But if the user has opted into a separate agreement with You that allows You or Your Product to store or use personal or sensitive information directly related to Your Product (not including other products or applications) then the terms of that separate agreement will govern Your use of such information. If the user provides Your Product with Google Account information, Your Product may only use that information to access the user&#8217;s Google Account when, and for the limited purposes for which, the user has given You permission to do so.</p>
<p>4.4 Prohibited Actions. You agree that You will not engage in any activity with the Market, including the development or distribution of Products, that interferes with, disrupts, damages, or accesses in an unauthorized manner the devices, servers, networks, or other properties or services of any third party including, but not limited to, Android Users, Google or any mobile network operator. You may not use customer information obtained from the Market to sell or distribute Products outside of the Market.</p>
<p>4.5 Non-Compete. You may not use the Market to distribute or make available any Product whose primary purpose is to facilitate the distribution of Products outside of the Market.</p>
<p>4.6 You agree that You are solely responsible for (and that Google has no responsibility to You or to any third party for) any Products You distribute through the Market and for the consequences of Your actions (including any loss or damage which Google may suffer) by doing so.</p>
<p>4.7 You agree that You are solely responsible for (and that Google has no responsibility to You or to any third party for) any breach of Your obligations under this Agreement, any applicable third party contract or terms of service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.</p>
<p>4.8 The Market will allow You to protect Your Products so that users may not share Products with other users or devices.</p>
<p>4.9 Product Ratings. The Market will allow users to rate Products. Only users who download the applicable Product will be able to rate it. Product ratings will be used to determine the placement of Products on the Market with higher rated Products generally given better placement, subject to Google&#8217;s ability to change placement at Google&#8217;s sole discretion. The Market may also assign You a composite score for any Product that has not received user ratings. This &#8220;Developer Composite Score&#8221; will be a representation of the quality of Your Product based on Your history and will be determined at Google&#8217;s sole discretion. For new Developers without Product history, Google may use or publish performance measurements such as uninstall and/or refund rates to identify or remove Products that are not meeting acceptable standards, as determined by Google. Google reserves the right to display Products to users in a manner that will be determined at Google&#8217;s sole discretion.</p>
<p>Your Products may be subject to user ratings with which You may not agree. You may contact Google if You have any questions or concerns regarding such ratings at http://market.android.com/support/publish.</p>
<p>4.10 Marketing Your Product. You will be responsible for uploading Your Products to the Market, providing required Product information to users, and accurately disclosing the security permissions necessary for the Product to function on user Devices. Products that are not properly uploaded will not be published in the Market.</p>
<p>4.11 Restricted Content. Any Product You distribute on the Market must adhere to the Market Content Policy for Developers located at http://www.android.com/market/terms/developer-content-policy.html.</p>
<p>5. License Grants</p>
<p>5.1 You grant to Google a nonexclusive, worldwide, and royalty-free license to: copy, perform, display, and use the Products for administrative and demonstration purposes in connection with the operation and marketing of the Market and to use the Products to make improvements to the Android platform.</p>
<p>5.2 You grant to Google a non-exclusive, and royalty-free license to make available, communicate to the public and distribute the Products according to the publishing options selected by You on the Product upload page of the Market.</p>
<p>5.3 Google may use consultants and other contractors in connection with the performance of obligations and exercise of rights under this agreement, and may sublicense its rights under this Agreement to them accordingly, provided that such consultants and contractors will be subject to the same obligations as Google. After termination of this Agreement, Google will not distribute Your Product, but may retain and use copies of the Product for support of the Market and the Android platform.</p>
<p>5.4 You grant to the user a non-exclusive, worldwide, and perpetual license to perform, display, and use the Product on the Device. If You choose, You may include a separate end user license agreement (EULA) in Your Product that will govern the user&#8217;s rights to the Product in lieu of the previous sentence.</p>
<p>5.5 You represent and warrant that You either own or have a valid licence of all Intellectual Property Rights in and to the Product. If You use third-party materials, or any Intellectual Property Rights in the Product are owned by third parties, You represent and warrant that You have the right to distribute the third-party material in the Product. You agree that You will not submit material to Market that is subject to third party Intellectual Property Rights unless You are the owner of such Intellectual Property Rights or have permission from their rightful owner to submit the material in the manner described in this Agreement.</p>
<p>6. Brand Features and Publicity.</p>
<p>6.1 Each party shall own all right, title and interest, including without limitation all Intellectual Property Rights, relating to its Brand Features. Except to the limited extent expressly provided in this Agreement, neither party grants, nor shall the other party acquire, any right, title or interest (including, without limitation, any implied license) in or to any Brand Features of the other party. Subject to the terms and conditions of this Agreement, Developer grants to Google and its affiliates a limited, non-exclusive, royalty-free, worldwide license during the term of this Agreement to display Developer Brand Features, submitted by Developer to Google, for use solely online or on mobile devices and in either case solely in connection with the distribution and sale of Developer&#8217;s Product through the Market or to otherwise fulfill its obligations under this Agreement. If Developer discontinues the distribution of specific Products on the Market, Google will cease use of the discontinued Products&#8217; Brand Features pursuant to this Section 6.1, except as necessary to allow Google to effectuate Section 3.6. Nothing in this Agreement gives Developer a right to use any of Google&#8217;s trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.</p>
<p>6.2 Publicity. In addition to the license granted in 6.1 above, for purposes of marketing the presence, distribution and sale of the Developer&#8217;s Product in the Market, Google and its affiliates may include Developer Brand Features, submitted by Developer to Google: (i) within the Market and in any Google-owned online or mobile properties; (ii) in online or mobile communications outside the Market when mentioned along with other Market Products; (iii) when making announcements of the availability of the Product online or on mobile devices; (iv) in presentations; and (v) in customer lists which appear either online or on mobile devices (which includes, without limitation, customer lists posted on Google websites). If Developer discontinues the distribution of specific Products on the Market, Google will cease use of the discontinued Products&#8217; Brand Features for such marketing purposes. Google grants to Developer a limited, non-exclusive, worldwide, royalty-free license to use the Android Brand Features for the term of this Agreement solely for marketing purposes and only in accordance with the Android Brand Guidelines located at http://www.android.com/branding.html).</p>
<p>7. Product Takedowns.</p>
<p>7.1(a) Your Takedowns. You may remove Your Products from future distribution via the Market at any time, but You must comply with this Agreement and the Payment Processor&#8217;s Payment Account terms of service for any Products distributed through the Market, including but not limited to refund requirements. Removing Your Products from future distribution via the Market does not (a) affect the license rights of users who have previously purchased or downloaded Your Products, (b) remove Your Products from Devices or from any part of the Market where previously purchased or downloaded applications are stored on behalf of users, or (c) change Your obligation to deliver or support Products or services that have been previously purchased or downloaded by users. Notwithstanding the foregoing, in no event will Google maintain on any portion of the Market (including, without limitation, the part of the Market where previously purchased or downloaded applications are stored on behalf of users) any Product that You have removed from the Market and where You have provided written notice to Google that such removal was due to (i) an allegation of infringement, or actual infringement, of any Intellectual Property Right of any person, (ii) an allegation of defamation or actual defamation, (iii) an allegation of violation, or actual violation, of any third party&#8217;s right of publicity or privacy, or (iv) an allegation or determination that such Product does not comply with applicable law.<br />
(b) If You remove a Product from the Market pursuant to clauses (i), (ii), (iii) or (iv) of this Section 7.1, and an end user purchased such Product within a year before the date of takedown, at Google&#8217;s request, You must refund to the affected end user all amounts paid by such end user for such affected Product, less the portion of the Transaction Fee specifically allocated to the credit card/payment processing for the associated transaction.</p>
<p>7.2 (a) Google Takedowns. While Google does not intend, and does not undertake, to monitor the Products or their content, if Google is notified by You or otherwise becomes aware and determines in its sole discretion that a Product or any portion thereof or Your Brand Features; (a) infringes the Intellectual Property Rights or any other rights of any third party; (b) breaches any applicable law or is subject to an injunction; (c) is pornographic, obscene or otherwise violates Google&#8217;s hosting policies or other terms of service as may be updated by Google from time to time in its sole discretion; (d) is being distributed by You improperly; (e) may create liability for Google or Authorized Carriers; (f) is deemed by Google to have a virus or is deemed to be malware, spyware or have an adverse impact on Google&#8217;s or an Authorized Carrier&#8217;s network; (g) breaches the terms of this Agreement or the Market Content Policy for Developers; or (h) the display of the Product is impacting the integrity of Google servers (i.e., users are unable to access such content or otherwise experience difficulty), Google may remove the Product from the Market or reclassify the Product at its sole discretion. Google reserves the right to suspend and/or bar any Developer from the Market at its sole discretion.<br />
(b) Google enters into distribution agreements with device manufacturers and Authorized Carriers to place the Market software client application for the Market on Devices. These distribution agreements may require the involuntary removal of Products in breach of the Device manufacturer&#8217;s or Authorized Carrier&#8217;s terms of service.</p>
<p>(c) In the event that Your Product is involuntarily removed because it is defective, malicious, infringes Intellectual Property Rights of another person, defames, infringes a third party&#8217;s right of publicity or privacy, or does not comply with applicable laws or rgeulations, and an end user purchased such Product within a year before the date of takedown: (i) You must refund to Google, all amounts received, plus any associated fees (i.e. chargebacks and payment transaction fees), and (ii) Google may, at its sole discretion, withhold from Your future sales the aggregate of the amounts referred to in subsection (i) above.</p>
<p>8. Your Developer Credentials</p>
<p>8.1 You agree that You are responsible for maintaining the confidentiality of any developer credentials that may be issued to You by Google or which You may choose Yourself and that You will be solely responsible for all applications that are developed under Your developer credentials. Google may limit the number of Developer Accounts issued to You or to the company or organization You work for.</p>
<p>9. Privacy and Information</p>
<p>9.1 In order to continually innovate and improve the Market, Google may collect certain usage statistics from the Market and Devices, including but not limited to, information on how the Market and Devices are being used.</p>
<p>9.2 The data collected is examined in the aggregate to improve the Market for users and Developers and is maintained in accordance with Google&#8217;s Privacy Policy. To ensure the improvement of Products, limited aggregate data may be available to You upon written request.</p>
<p>10. Terminating this Agreement</p>
<p>10.1 This Agreement will continue to apply until terminated by either You or Google as set out below.</p>
<p>10.2 If You want to terminate this Agreement, You must provide Google with thirty (30) days prior written notice (unless this Agreement terminates under Section 14.1) and cease Your use of any relevant developer credentials.</p>
<p>10.3 Google may at any time, terminate this Agreement with You if:</p>
<p>(A) You have materially breached any provision of this Agreement; or</p>
<p>(B) Google is required to do so by law; or</p>
<p>(C) You cease being an authorized Developer; or</p>
<p>(D) Google decides to no longer provide the Market.</p>
<p>11. WARRANTIES</p>
<p>11.1 Each party warrants to the other that it will use reasonable care and skill in complying with its obligations under this Agreement.</p>
<p>11.2 Your use of the market and any material downloaded or otherwise obtained through the use of the Market is at Your own discretion and risk and You are solely responsible for any damage to your computer system or other device or loss of data that results from such use.</p>
<p>11.3 No conditions, warranties or other terms apply to the Market or to any other goods or services supplied by Google under this Agreement unless expressly set out in this Agreement. Subject to Section 12.1(b), no implied conditions, warranties or other terms apply (including any implied terms as to satisfactory quality, fitness for purpose or conformance with description).</p>
<p>12. LIMITATION OF LIABILITY</p>
<p>12.1 Nothing in this Agreement shall exclude or limit either party&#8217;s liability for:</p>
<p>(a) death or personal injury resulting from the negligence of either party or their servants, agents or employees;</p>
<p>(b) fraud or fraudulent misrepresentation; or</p>
<p>(c) misuse of confidential information.</p>
<p>Nothing in this Agreement shall exclude or limit liability under Section 13 (Indemnities).</p>
<p>Subject to clauses 12.1 and 12.2, neither party shall be liable under this Agreement (whether in contract, tort or otherwise) for any special, indirect or consequential losses (whether or not such losses were within the contemplation of the parties at the date of this Agreement) suffered or incurred by the other party.</p>
<p>13. Indemnification</p>
<p>13.1 You agree to defend, indemnify and hold harmless Google from and against any and all third party claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable legal fees) suffered or incurred by Google, any of its affiliates or their respective directors, officers, employees and agents, or by any Authorized Carrier, arising out of or accruing from (a) Your use of the Market in breach of this Agreement, and (b) any claim that Your Product that infringes any Intellectual Property Right of any person or defames any person or infringes their rights of publicity or privacy. Google shall provide You with reasonable information, assistance and cooperation in responding to and, where applicable, defending each such claim and You shall accept full control and sole authority over the defence and settlement of any such claim.</p>
<p>13.2 To the maximum extent permitted by law, you agree to indemnify Google from and against any and all third party losses, claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) incurred by Google, the applicable Payment Processors (which may include Google and/or third parties) or the Payment Processors&#8217; affiliates, directors, officers, employees and agents arising out of or accruing from taxes related to Your distribution of Products distributed via the Market.</p>
<p>14. Changes to the Agreement</p>
<p>14.1 Google may make changes to this Agreement at any time by sending the Developer notice by email describing the modifications made. Google will also post a notification on the Market site describing the modifications made. The changes will become effective, and will be deemed accepted by Developer, (a) immediately for those who become Developers after the notification is posted, or (b) for pre-existing Developers, the modified Agreement will become effective upon Developer&#8217;s acceptance of the modified Agreement (except changes required by law which will be effective immediately). Pre-existing Developers will show their acceptance of the modified Agreement by going to the Market site and accepting the modified Agreement. In the event that Developer does not agree with the modifications to the Agreement within thirty (30) days after the date the email is sent, then Google will suspend the distribution of Developer&#8217;s Products until Developer agrees to the modified Agreement. In the event that You do not agree with the modifications within ninety (90) days after the date the email is sent, then You must terminate Your use of the Market, which will be Your sole and exclusive remedy.</p>
<p>15. General Legal Terms</p>
<p>15.1 All notices of termination or breach must be in English, in writing, addressed to the other party&#8217;s Legal Department and sent (in the case of Google) to legal-notices@google.com (as applicable) and in the acse of developer to the address notified to Google upon registration, or any other address as either party has notified the other in accordance with this clause. All notices shall be deemed to have been given on receipt as verified by written or automated receipt or electronic log (as applicable).</p>
<p>All other notices must be in English, in writing, addressed to the other party&#8217;s primary contact and sent to their then current postal address or email address.</p>
<p>Neither party may assign any of its rights or obligations under this Agreement without the prior written consent of the other.</p>
<p>You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to this Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of this Agreement that confers a benefit on (or rights in favor of) them. Except as expressly stated otherwise, nothing in this Agreement shall create or confer any rights or other benefits in favour of any person other than the parties to this Agreement.</p>
<p>Except as expressly stated otherwise, nothing in this Agreement shall create an agency, partnership or joint venture of any kind between the parties.</p>
<p>Neither party shall be liable for failure to perform or delay in performing any obligation under this Agreement if the failure or delay is caused by any circumstances beyond its reasonable control.</p>
<p>15.7 Failure or delay in exercising any right or remedy under this Agreement shall not constitute a waiver of such (or any other) right or remedy.</p>
<p>15.8 The invalidity, illegality or unenforceability of any term (or part of a term) of this Agreement shall not affect the continuation in force of the remainder of the term (if any) and this Agreement.</p>
<p>15.9 Subject to Section 12.1(b), this Agreement sets out all terms agreed between the parties in relation to its subject matter and supersedes all previous agreements between the parties relating to the same. In entering into this Agreement neither party has relied on any statement, representation or warranty not expressly set out in this Agreement.</p>
<p>15.10 This Agreement is governed by English law and the parties submit to the exclusive jurisdiction of the English courts in relation to any dispute (contractual or non-contractual) concerning this Agreement save that either party may apply to any court for an injunction or other relief to protect its Intellectual Property Rights. If this Agreement is translated into any other language, if there is conflict the English text will take precedence.</p>
<p>15.11 Export Restrictions. Products on the Market may be subject to United States export laws and regulations. you must comply with all domestic and international export laws and regulations that apply to your distribution or use of Products. These laws include restrictions on destinations, users and end use.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Polygon live wallpaper</title>
		<link>http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 21:10:49 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[Live Wallpaper]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=939</guid>
		<description><![CDATA[Following the success of my first live wallpaper (Nexus Revamped Pro) I have created another. The wallpaper bares similarity to the windows screensaver mystify but much more ascetically pleasing. Features Background color Polygon color or cycle through a range of colors Line thickness Number of apexes Number of trails Speed of movement Performance settings, anti-aliasing [...]]]></description>
			<content:encoded><![CDATA[<p>Following the success of my first live wallpaper (<a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/">Nexus Revamped Pro</a>) I have created another. The wallpaper bares similarity to the windows screensaver mystify but much more ascetically pleasing.</p>
<p><strong>Features</strong></p>
<ul>
<li>Background color</li>
<li>Polygon color or cycle through a range of colors</li>
<li>Line thickness</li>
<li>Number of apexes</li>
<li>Number of trails</li>
<li>Speed of movement</li>
<li>Performance settings, anti-aliasing and Frames per second (FPS)</li>
<li>More to come soon, feel free to request something!</li>
</ul>
<p><strong>Images</strong></p>

<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m18s24/' title='polygon livewallpaper 1'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m18s24-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 1" title="polygon livewallpaper 1" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m26s104/' title='polygon livewallpaper 2'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m26s104-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 2" title="polygon livewallpaper 2" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m33s173/' title='polygon livewallpaper 3'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m33s173-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 3" title="polygon livewallpaper 3" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h43m03s225/' title='polygon livewallpaper 4'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h43m03s225-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 4" title="polygon livewallpaper 4" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h43m17s106/' title='polygon livewallpaper 5'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h43m17s106-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 5" title="polygon livewallpaper 5" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m45s43/' title='polygon livewallpaper 6'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m45s43-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 6" title="polygon livewallpaper 6" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h48m55s125/' title='polygon livewallpaper 7'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h48m55s125-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 7" title="polygon livewallpaper 7" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/p/' title='polygon livewallpaper 8'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/p-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 8" title="polygon livewallpaper 8" /></a>

<p><strong>Video</strong></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/8zvZS8-sSFA&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8zvZS8-sSFA&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><strong>Market Links</strong></p>
<p><a href="market://details?id=com.stealthcopter.polygon">Polygon Live Wallpaper</a> (com.stealthcopter.polygon)</p>
<p><img src="http://www.stealthcopter.com/android/apps/polygon/qr_sml.png" alt="qr" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Robot Keychains Received</title>
		<link>http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 11:39:53 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[memorabilia]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[robot]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=932</guid>
		<description><![CDATA[I have received my android keychains (as mentioned previously) that I ordered from dealextreme, they are a little bigger than I was expecting and certain not suitable for strapping onto a phone, however they are the perfect size to be used with keyrings They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for [...]]]></description>
			<content:encoded><![CDATA[<p>I have received my android keychains (<a href="http://www.stealthcopter.com/blog/2010/06/android-robot-…ain-for-phones/">as mentioned previously</a>) that I ordered from <a href="http://www.dealextreme.com/r.27613104">dealextreme</a>, they are a little bigger than I was expecting and certain not suitable for strapping onto a phone, however they are the perfect size to be used with keyrings <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for 10+ (£2.12). When ordering more than 5 remember to enable bulk rates, this adds a delivery charge but the prices calculated above include this, and you still save more.<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">Green android product link</a></p>
<p><strong>Photos:</strong></p>
<div id="attachment_936" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_120037/" rel="attachment wp-att-936"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_120037-600x450.jpg" alt="Android keychain" title="Android keychain" width="600" height="450" class="size-medium wp-image-936" /></a><p class="wp-caption-text">Android keychain</p></div>
<div id="attachment_933" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_115728/" rel="attachment wp-att-933"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_115728-600x800.jpg" alt="Android keychain" title="Android keychain" width="600" height="800" class="size-medium wp-image-933" /></a><p class="wp-caption-text">Android keychain</p></div>
<div id="attachment_934" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_115742/" rel="attachment wp-att-934"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_115742-600x450.jpg" alt="Android keychain" title="Android keychain" width="600" height="450" class="size-medium wp-image-934" /></a><p class="wp-caption-text">Android keychain</p></div>
<div id="attachment_935" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_115753/" rel="attachment wp-att-935"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_115753-600x450.jpg" alt="Android keychain" title="Android keychain" width="600" height="450" class="size-medium wp-image-935" /></a><p class="wp-caption-text">Android keychain</p></div>
<p>You can also get a pack of 4 (one of each colour) for $8.10 (£5.38) shown below:<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">4 Colour android pack product link</a></p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104"><img alt="4 Colour pack of Android Robot Keyrings (for phones)" src="http://www1.dealextreme.com/productimages/sku_42022_1.jpg" title="4 Colour pack of Android Robot Keyrings (for phones)" width="600" height="600" /></a><p class="wp-caption-text">4 Colour pack of Android Robot Keyrings (for phones)</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing the battery percentage in an AVD (android virtual device) emulator</title>
		<link>http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 23:19:09 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[AVD]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=925</guid>
		<description><![CDATA[First I will briefly show how to react to the battery percentage change in your application, and then show how to change the battery level in the android emulator (AVD). Reacting to the battery level change in your program We need to register our application to receive the intent when the battery level information is [...]]]></description>
			<content:encoded><![CDATA[<p>First I will briefly show how to react to the battery percentage change in your application, and then show how to change the battery level in the android emulator (AVD).</p>
<p><strong>Reacting to the battery level change in your program</strong></p>
<p>We need to register our application to receive the intent when the battery level information is changed, we do this by adding the following line into our onCreate method of our activity (or some other instance):</p>
<pre name="code" class="python">
registerReceiver(this.mBatInfoReceiver,
		new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
</pre>
<p>This will run mBatInfoReceiver when the battery level is changed, so we now need to create this method in our activity (or some other instance). The function creates a broadcast receiver to handle the information when the intent is sent for the battery status changing.</p>
<pre name="code" class="python">
		private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){

		    @Override
			public void onReceive(Context arg0, Intent intent) {
			      int level = intent.getIntExtra("level", 0);
			      // TODO: Preform action based upon battery level
			}
		  };
</pre>
<p>(<a href="http://www.tutorialforandroid.com/2009/01/getting-battery-information-on-android.html">reference</a>)</p>
<p><strong>Changing the battery level in AVD</strong></p>
<p>First we need to find the port so that we can address the emulator, this will be shown in the titlebar of the AVD.</p>
<div id="attachment_926" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/avd/" rel="attachment wp-att-926"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/avd-600x421.png" alt="Froyo running in an AVD (android emulator)" title="Froyo running in an AVD (android emulator)" width="600" height="421" class="size-medium wp-image-926" /></a><p class="wp-caption-text">Froyo running in an AVD (android emulator)</p></div>
<p>Zooming in:</p>
<a href="http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/5554froyo/" rel="attachment wp-att-927"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/5554froyo.png" alt="AVD title shows the port &quot;5554:froyo&quot;" title="AVD title shows the port &quot;5554:froyo&quot;" width="174" height="81" class="size-full wp-image-927" /></a>
<p>Using the port from the AVD found above we can use telnet to control certain aspects of the avd see <a href="http://developer.android.com/guide/developing/tools/emulator.html#power">this android reference</a> for a full reference. </p>
<pre>
<strong>telnet localhost 5554</strong>
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
help
Android console command help:

    help|h|?         print a list of commands
    event            simulate hardware events
    geo              Geo-location commands
    gsm              GSM related commands
    kill             kill the emulator instance
    network          manage network settings
    power            power related commands
    quit|exit        quit control session
    redir            manage port redirections
    sms              SMS related commands
    avd              manager virtual device state
    window           manage emulator window

try 'help <command>' for command-specific help
OK
</pre>
<p>Some more information on the power commands:</p>
<pre>
<strong>help power</strong>
allows to change battery and AC power status

available sub-commands:
    display          display battery and charger state
    ac               set AC charging state
    status           set battery status
    present          set battery present state
    health           set battery health state
    capacity         set battery capacity state
</pre>
<p>So now you can change the battery level in the avd using <em>power capacity percentage</em></p>
<pre>
<strong>power capacity 100</strong>
OK
<strong>power capacity 99</strong>
OK
<strong>power capacity 60</strong>
OK
<strong>power capacity 20</strong>
OK
<strong>power capacity 0</strong>
OK
</pre>
<p>As you change the battery capacity you should notice that your AVD is responding, just by looking at the battery indicator in the status bar, and your program will react if you have replaced the //TODO: code with something that reacts when the onReceive is called.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Robot Keychain (for phones)</title>
		<link>http://www.stealthcopter.com/blog/2010/06/android-robot-keychain-for-phones/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/android-robot-keychain-for-phones/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 01:33:44 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[memorabilia]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[robot]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=916</guid>
		<description><![CDATA[I just noticed that dealextreme are selling some android memorabilia, in the form of mobile phone strap android robots! They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for 10+ (£2.12). When ordering more than 5 remember to enable bulk rates, this adds a delivery charge but the prices calculated above include this, [...]]]></description>
			<content:encoded><![CDATA[<p>I just noticed that <a href="http://www.dealextreme.com/r.27613104">dealextreme</a> are selling some android memorabilia, in the form of <a href="http://www.dealextreme.com/details.dx/sku.42021~r.27613104">mobile phone strap android robots!</a></p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://www.dealextreme.com/details.dx/sku.42021~r.27613104"><img alt="Green Android Robot Keyring (for phones)" src="http://www1.dealextreme.com/productimages/sku_42021_1.jpg" title="Green Android Robot Keyring (for phones)" width="600" height="600" /></a><p class="wp-caption-text">Green Android Robot Keyring (for phones)</p></div>
<p>They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for 10+ (£2.12). When ordering more than 5 remember to enable bulk rates, this adds a delivery charge but the prices calculated above include this, and you still save more.<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">Green android product link</a></p>
<p>You can also get a pack of 4 (one of each colour) for $8.10 (£5.38) shown below:<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">4 Colour android pack product link</a></p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104"><img alt="4 Colour pack of Android Robot Keyrings (for phones)" src="http://www1.dealextreme.com/productimages/sku_42022_1.jpg" title="4 Colour pack of Android Robot Keyrings (for phones)" width="600" height="600" /></a><p class="wp-caption-text">4 Colour pack of Android Robot Keyrings (for phones)</p></div>
<p>I have ordered lots of the Green android cell phone straps, and I will post an update with images when they arrive!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/android-robot-keychain-for-phones/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nexus Revamped (free) updated (live wallpaper)</title>
		<link>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 21:53:20 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[Live Wallpaper]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=895</guid>
		<description><![CDATA[Following the update of nexus revamped pro, I have upgraded the free edition! This upgrade brings many improvements over the last version and should have a considerable performance increase, therefore less lagging and better battery life. Below details what options the Nexus Revamped Live Wallpaper now has to offer: Theme options Background Themes Image &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Following the update of <a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/">nexus revamped pro</a>, I have upgraded the free edition! This upgrade brings many improvements over the last version and should have a considerable performance increase, therefore less lagging and better battery life.</p>
<div id="attachment_913" class="wp-caption aligncenter" style="width: 491px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/nexus_ss/" rel="attachment wp-att-913"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nexus_ss-481x800.png" alt="Nexus Revamped Live Wallpaper in action" title="Nexus Revamped Live Wallpaper in action" width="481" height="800" class="size-medium wp-image-913" /></a><p class="wp-caption-text">Nexus Revamped Live Wallpaper in action</p></div>
<p>Below details what options the Nexus Revamped Live Wallpaper now has to offer:</p>
<p><strong>Theme options</strong></p>
<div id="attachment_911" class="wp-caption aligncenter" style="width: 491px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/nexus_revamped_themes/" rel="attachment wp-att-911"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nexus_revamped_themes-481x800.png" alt="Nexus Revamped Live Wallpaper Theme Settings" title="Nexus Revamped Live Wallpaper Theme Settings" width="481" height="800" class="size-medium wp-image-911" /></a><p class="wp-caption-text">Nexus Revamped Live Wallpaper Theme Settings</p></div>
<p><strong>Background Themes</strong></p>
<ul>
<li><strong>Image</strong> &#8211; Choose a background image</li>
<li><strong>Single Color</strong> &#8211;  Choose a background color</li>
</ul>
<p><strong>Background Options</strong></p>
<ul>
<li><strong>Background Tint</strong> &#8211; Give the chosen background a colored tint</li>
</ul>
<p><strong>Particle Themes</strong></p>
<ul>
<li><strong>Multi-color</strong> &#8211; Choose a mutli-color theme for the particles</li>
<li><strong>Single Color</strong> &#8211;  Choose a single color theme for the particles</li>
</ul>
<p><strong>Physics Settings</strong></p>
<div id="attachment_912" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/nexus_revamped_physics/" rel="attachment wp-att-912"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nexus_revamped_physics-480x800.png" alt="Nexus Revamped Live Wallpaper Physics Settings" title="Nexus Revamped Live Wallpaper Physics Settings" width="480" height="800" class="size-medium wp-image-912" /></a><p class="wp-caption-text">Nexus Revamped Live Wallpaper Physics Settings</p></div>
<ul>
<li><strong>Touch interaction</strong> &#8211; Enables/disables finger pressing causing spawning of particles</li>
<li><strong>Hide spawning</strong> &#8211;  Enables/disables particles only spawning offscreen</li>
<li><strong>Speed</strong> &#8211; Choose the speed of the particles</li>
<li><strong>Spawn Density</strong> &#8211; Choose how often particles are created</li>
</ul>
<p>Enjoy!</p>
<p><a href="market://details?id=com.stealthcopter.nexusrevamped">Nexus Revamped Live Wallpaper</a> (com.stealthcopter.nexusrevamped)</p>
<p><a href="http://www.stealthcopter.com/android/apps/nexusrevamped/nexusrevamped.apk">Download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/nexusrevamped/qr_sml.png" alt="qr" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Portal 2 teaser trailer and soundboard updated</title>
		<link>http://www.stealthcopter.com/blog/2010/06/portal-2-teaser-trailer-and-soundboard-updated/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/portal-2-teaser-trailer-and-soundboard-updated/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 20:43:35 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[soundboard]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=908</guid>
		<description><![CDATA[Valve have released a teaser trailer for Portal 2 (which is now due for release in 2011) and I have updated the portal soundboard (for android) to feature two new sounds included in this trailer. Video Soundboard Portal 2 soundboard updated to include to new sounds from GLaDOS: &#8220;It&#8217;s been a loooooooong time&#8221; &#8220;I think [...]]]></description>
			<content:encoded><![CDATA[<p>Valve have released a teaser trailer for Portal 2 (which is now due for release in 2011) and I have updated the <a href="http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/">portal soundboard</a> (for android) to feature two new sounds included in this trailer.</p>
<p><strong>Video</strong></p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/tax4e4hBBZc&#038;hl=en_GB&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tax4e4hBBZc&#038;hl=en_GB&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p><strong>Soundboard</strong></p>
<p><a href="http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/">Portal 2 soundboard</a> updated to include to new sounds from GLaDOS:<br />
&#8220;It&#8217;s been a loooooooong time&#8221;<br />
&#8220;I think we can put our differences behind us&#8230; for science&#8230; you monster&#8230;&#8221;</p>
<p><strong>Download</strong><br />
Portal SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using the download link</p>
<p>Android: <a href="market://details/?id=com.stealthcopter.portal">Portal Soundboard market link</a><br />
Download: <a href="http://www.stealthcopter.com/android/apps/portal/portal.apk">Portal Soundboard download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/portal/qr_sml.png" alt="qrcode" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/portal-2-teaser-trailer-and-soundboard-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portal Soundboard for Android released</title>
		<link>http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 22:58:21 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[soundboard]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=906</guid>
		<description><![CDATA[Follow the success of my other soundboards (Unreal Tournament SoundBoard and Counter-Strike Soundboard ); I have released a Portal soundboard for Android: Download Portal SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using [...]]]></description>
			<content:encoded><![CDATA[<p>Follow the success of my other soundboards (<a href="http://www.stealthcopter.com/blog/2010/01/android-unreal-tournament-soundboard/">Unreal Tournament SoundBoard</a> and <a href="http://www.stealthcopter.com/blog/2010/01/android-counter-strike-1-6-soundboard-released/">Counter-Strike Soundboard </a>); I have released a Portal soundboard for Android:</p>
<p><strong>Download</strong><br />
Portal SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using the download link</p>
<p>Android: <a href="market://details/?id=com.stealthcopter.portal">Portal Soundboard market link</a><br />
Download: <a href="http://www.stealthcopter.com/android/apps/portal/portal.apk">Portal Soundboard download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/portal/qr_sml.png" alt="qrcode" /></p>
<p><strong>Features</strong></p>
<ul>
<li><a href="http://half-life.wikia.com/wiki/GLaDOS">GLaDOS</a> sounds (Loads of)</li>
<li>Extra sounds from the overly friendly turret</li>
<li>Still alive song, and the cake reciepe</li>
<li>Save sounds as ringtones and notifications</li>
<li>Optional Adverts (Menu > toggle ads to hide)</li>
</ul>
<p><strong>Screenshots</strong></p>
<div class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/android/apps/portal/ss1.png"><img alt="Portal Soundboard Screenshot 1" src="http://www.stealthcopter.com/android/apps/portal/ss1.png" title="Portal Soundboard Screenshot 1" width="320" height="480" /></a><p class="wp-caption-text">Portal Soundboard Screenshot 1</p></div>
<div class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/android/apps/portal/ss2.png"><img alt="Portal Soundboard Screenshot 2" src="http://www.stealthcopter.com/android/apps/portal/ss2.png" title="Portal Soundboard Screenshot 2" width="320" height="480" /></a><p class="wp-caption-text">Portal Soundboard Screenshot 2</p></div>
<p>If you enjoyed this please leave feedback for me either here or on the market. Comments, suggestions and constructive criticism is also welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nexus One&#8217;s AMOLED Screen under the microscope</title>
		<link>http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 22:49:44 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[microscope]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=896</guid>
		<description><![CDATA[After casually browsing this wikipedia article on google&#8217;s Nexus One (or HTC&#8217;s) I became interested in the AMOLED (Active-matrix OLED (Organic Light Emitting Device) screen due to its interesting pixel structure. Quote from wikipedia: The Nexus One has a 3.7 inch AMOLED screen with PenTile matrix pixel arrangement. The raster resolution is 800&#215;480 pixels, however [...]]]></description>
			<content:encoded><![CDATA[<p>After casually browsing <a href="http://en.wikipedia.org/wiki/Nexus_one#Hardware">this wikipedia article</a> on google&#8217;s Nexus One (or HTC&#8217;s) I became interested in the <a href="http://en.wikipedia.org/wiki/Active-matrix_OLED">AMOLED</a> (Active-matrix <a href="http://en.wikipedia.org/wiki/OLED">OLED</a> (Organic Light Emitting Device) screen due to its interesting pixel structure. Quote from wikipedia:</p>
<blockquote><p>
The Nexus One has a 3.7 inch AMOLED screen with PenTile matrix pixel arrangement. The raster resolution is 800&#215;480 pixels, however each pixel in the PenTile RGBG display has only two subpixels (red and green, or blue and green alternately), rather than the three found in most displays. This gives it a total effective subpixel resolution of a 392&#215;653 RBG display.[40]
</p></blockquote>
<p>So I decided to have a look under the <a href="http://www.stealthcopter.com/blog/2010/03/digimicro-200x-zooming-usb-digital-microscope-in-ubuntu-linux/">microscope</a> to see what I could find with my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">nexus one</a>. Enjoy the following images:</p>
<p><strong>Low Zoom</strong></p>
<div id="attachment_898" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-232506/" rel="attachment wp-att-898"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-232506-600x480.jpg" alt="Nexus One&#039;s AMOLED screen under the microscope (Low magnification)" title="Nexus One&#039;s AMOLED screen under the microscope (Low magnification)" width="600" height="480" class="size-medium wp-image-898" /></a><p class="wp-caption-text">Nexus One's AMOLED screen under the microscope (Low magnification)</p></div>
<p><strong>High zoom</strong></p>
<div id="attachment_899" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-232527/" rel="attachment wp-att-899"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-232527-600x480.jpg" alt="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" title="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" width="600" height="480" class="size-medium wp-image-899" /></a><p class="wp-caption-text">Nexus One's AMOLED screen under the microscope (High magnification)</p></div>
<div id="attachment_900" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-232537/" rel="attachment wp-att-900"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-232537-600x480.jpg" alt="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" title="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" width="600" height="480" class="size-medium wp-image-900" /></a><p class="wp-caption-text">Nexus One's AMOLED screen under the microscope (High magnification)</p></div>
<p><strong>Regular Pixel</strong></p>
<div id="attachment_901" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-234045/" rel="attachment wp-att-901"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-234045-600x480.jpg" alt="Regular pixels from a TFT screen" title="Regular pixels from a TFT screen" width="600" height="480" class="size-medium wp-image-901" /></a><p class="wp-caption-text">Regular pixels from a TFT screen</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nexus Revamped Pro updated (google android live wallpaper)</title>
		<link>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 21:27:03 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Live Wallpaper]]></category>
		<category><![CDATA[nexus one]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=885</guid>
		<description><![CDATA[I thought it was about time for another post about Nexus Revamped Live Wallpaper Pro as a follow up to this post. Following the original release many updates have gone by and I have received numerous emails with feedback and suggestions which are very much appreciated. Several additional features have been added and there are [...]]]></description>
			<content:encoded><![CDATA[<p>I thought it was about time for another post about Nexus Revamped Live Wallpaper Pro as a follow up to this <a href="http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/">post</a>. </p>
<div id="attachment_893" class="wp-caption aligncenter" style="width: 459px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_ss/" rel="attachment wp-att-893"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_ss-449x800.png" alt="Nexus Revampe Pro Update Screenshot" title="Nexus Revampe Pro Update Screenshot" width="449" height="800" class="size-medium wp-image-893" /></a><p class="wp-caption-text">Nexus Revampe Pro Update Screenshot</p></div>
<p>Following the original release many updates have gone by and I have received numerous emails with feedback and suggestions which are very much appreciated. Several additional features have been added and there are many more on the way.</p>
<p><strong>Changes</strong></p>
<ul>
<li>more themes for background and particles</li>
<li>White nexus theme due to popular demand (thanks for the emails)</li>
<li>improved performance (still optimising, future upgrades will be even better)</li>
<li>Option to change tail length</li>
<li>Seperated single-color and multi-color backgrounds/particle colors (more to come soon!)</li>
<li>preliminary support for smaller screens</li>
</ul>
<div id="attachment_892" class="wp-caption aligncenter" style="width: 456px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_col/" rel="attachment wp-att-892"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_col.png" alt="Nexus Revampe Pro Update Screenshot - Colors" title="Nexus Revampe Pro Update Screenshot - Colors" width="446" height="771" class="size-full wp-image-892" /></a><p class="wp-caption-text">Nexus Revampe Pro Update Screenshot - Colors</p></div>
<div id="attachment_890" class="wp-caption aligncenter" style="width: 462px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_themes/" rel="attachment wp-att-890"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_themes-452x800.png" alt="Nexus Revampe Pro Update - Theme settings" title="Nexus Revampe Pro Update - Theme settings" width="452" height="800" class="size-medium wp-image-890" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - Theme settings</p></div>
<div id="attachment_886" class="wp-caption aligncenter" style="width: 458px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nrp_bw/" rel="attachment wp-att-886"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nrp_bw-448x800.png" alt="Nexus Revampe Pro Update - Black and white theme" title="Nexus Revampe Pro Update - Black and white theme" width="448" height="800" class="size-medium wp-image-886" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - Black and white theme</p></div>
<div id="attachment_888" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_tail/" rel="attachment wp-att-888"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_tail-600x475.png" alt="Nexus Revampe Pro Update - Tail length" title="Nexus Revampe Pro Update - Tail length" width="600" height="475" class="size-medium wp-image-888" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - Tail length</p></div>
<div id="attachment_889" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_tails/" rel="attachment wp-att-889"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_tails-600x208.png" alt="Nexus Revampe Pro Update - No tails, long tails and short tails" title="Nexus Revampe Pro Update - No tails, long tails and short tails" width="600" height="208" class="size-medium wp-image-889" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - No tails, long tails and short tails</p></div>
<p>I will also push updates down to the free version of this application soon, but some options will be left out to reward the paying customers <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Android Market Links</strong><br />
Either click the following android market links (in android phone) or search the market for nexus revamped.<br />
<em><strong>Pro Version</strong></em><br />
<a href="market://details?id=com.stealthcopter.nexusrevampedpro">Nexus Revamped Pro Live Wallpaper</a> (com.stealthcopter.nexusrevampedpro)</p>
<p><img src="http://www.stealthcopter.com/android/apps/nexusrevampedpro/qr_sml.png" alt="qr" /></p>
<p><em><strong>Free Version</strong></em></p>
<p><a href="market://details?id=com.stealthcopter.nexusrevamped">Nexus Revamped Live Wallpaper</a> (com.stealthcopter.nexusrevamped)</p>
<p><a href="http://www.stealthcopter.com/android/apps/nexusrevamped/nexusrevamped.apk">Download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/nexusrevamped/qr_sml.png" alt="qr" /></p>
<p><strong>Future</strong><br />
I have plans and ideas for the future of this application, please complete the poll below to indicate what you&#8217;d like to see in this app or leave feedback (comment) if you have any.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Photos of the android statues outside building 44</title>
		<link>http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/</link>
		<comments>http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/#comments</comments>
		<pubDate>Thu, 27 May 2010 23:25:01 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=870</guid>
		<description><![CDATA[I decided to visit the android statues outside google&#8217;s building 44 in mountain view as I was in the area for a conference and holiday. Here are some photos that I took on my nexus one The Froyo android statue was still wrapped up as discussed on techcrunch Other photos]]></description>
			<content:encoded><![CDATA[<p>I decided to visit the android statues outside google&#8217;s building 44 in mountain view as I was in the area for a conference and holiday. Here are some photos that I took on my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">nexus one</a></p>
<div id="attachment_869" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-57-58/" rel="attachment wp-att-869"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.57.58-600x450.jpg" alt="Me hugging the android outside building 44" title="Me hugging the android outside building 44" width="600" height="450" class="size-medium wp-image-869" /></a><p class="wp-caption-text">Me hugging the android outside building 44</p></div>
<div id="attachment_874" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/attachment/190520101716/" rel="attachment wp-att-874"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/190520101716-600x450.jpg" alt="Nexus one against the nexus one statue" title="Nexus one against the nexus one statue" width="600" height="450" class="size-medium wp-image-874" /></a><p class="wp-caption-text">Nexus one against the nexus one statue</p></div>
<div id="attachment_875" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-57-22/" rel="attachment wp-att-875"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.57.22-600x800.jpg" alt="Doughnut android statue" title="Doughnut android statue" width="600" height="800" class="size-medium wp-image-875" /></a><p class="wp-caption-text">Doughnut android statue</p></div>
<div id="attachment_876" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-57-04/" rel="attachment wp-att-876"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.57.04-600x800.jpg" alt="Cupcake android statue" title="Cupcake android statue" width="600" height="800" class="size-medium wp-image-876" /></a><p class="wp-caption-text">Cupcake android statue</p></div>
<div id="attachment_877" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-56-57/" rel="attachment wp-att-877"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.56.57-600x450.jpg" alt="Eclaire android statue" title="Eclaire android statue" width="600" height="450" class="size-medium wp-image-877" /></a><p class="wp-caption-text">Eclaire android statue</p></div>
<p>The Froyo android statue was still wrapped up as discussed on <a href="http://techcrunch.com/2010/05/13/android-froyo-sculpture-unveiled-almost-and-google-security-was-almost-called/">techcrunch</a></p>
<p><strong>Other photos</strong></p>
<div id="attachment_873" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-41-12/" rel="attachment wp-att-873"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.41.12-600x450.jpg" alt="google" title="google" width="600" height="450" class="size-medium wp-image-873" /></a><p class="wp-caption-text">google</p></div>
<div id="attachment_868" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-32-41/" rel="attachment wp-att-868"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.32.41-600x450.jpg" alt="Google Building" title="Google Building" width="600" height="450" class="size-medium wp-image-868" /></a><p class="wp-caption-text">Google Building</p></div>
<div id="attachment_872" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/google44-2/" rel="attachment wp-att-872"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/google441-600x456.png" alt="Location of building 44" title="Location of building 44" width="600" height="456" class="size-medium wp-image-872" /></a><p class="wp-caption-text">Location of building 44</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nexus Revamped Live wallpaper</title>
		<link>http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/#comments</comments>
		<pubDate>Sun, 02 May 2010 18:28:06 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[Live Wallpaper]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=866</guid>
		<description><![CDATA[Having recieved my Nexus one from google, I felt compelled to write a Live Wallpaper app because of how sexy they look. So I got playing around and ended up writing a wallpaper from scratch that is designed to be similar to the Nexus Live Wallpaper, but with improved efficiency and lots of customisability. I [...]]]></description>
			<content:encoded><![CDATA[<p>Having recieved my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">Nexus one</a> from google, I felt compelled to write a Live Wallpaper app because of how sexy they look. So I got playing around and ended up writing a wallpaper from scratch that is designed to be similar to the Nexus Live Wallpaper, but with improved efficiency and lots of customisability.</p>
<p>I have created a pro version of the application which features more options and extra backgrounds and themes, which is available for a small fee which will help support development. </p>
<p><strong>Video</strong></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/lq0onEd1U2I&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/lq0onEd1U2I&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Please note that this is a video taken in an emulator using screen recording software, so it is less responsive and more stuttery than when run on an actual phone.</p>
<p><strong>Android Market Links</strong><br />
<a href="market://details?id=com.stealthcopter.nexusrevampedpro">Nexus Revamped Pro Live Wallpaper</a> (com.stealthcopter.nexusrevampedpro)<br />
<a href="market://details?id=com.stealthcopter.nexusrevamped">Nexus Revamped Live Wallpaper</a> (com.stealthcopter.nexusrevamped)</p>
<p>As always I welcome feedback and bug reports!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Received my complimentary Nexus One from Google device seeding</title>
		<link>http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 17:47:51 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[nexus one]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=784</guid>
		<description><![CDATA[Short story: I received a free Nexus One (HTC) from Google for having an application on the android market with over 5000 downloads and a rating above 3.5 (For Counter-Strike 1.6 soundboard) Back Story Got a questionable email from Google (02/03/2010 23:47): Subject: Device Seeding Program for Top Android Market Developers From: android-market-seeding@google.com Due to [...]]]></description>
			<content:encoded><![CDATA[<p>Short story: I received a free Nexus One (HTC) from Google for having an application on the android market with over 5000 downloads and a rating above 3.5 (For <a href="http://www.stealthcopter.com/blog/2010/01/android-counter-strike-1-6-soundboard-released/">Counter-Strike 1.6 soundboard</a>)</p>
<div id="attachment_863" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_unpackaged/" rel="attachment wp-att-863"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_unpackaged-600x450.png" alt="Nexus One unpacked" title="Nexus One unpacked" width="600" height="450" class="size-medium wp-image-863" /></a><p class="wp-caption-text">Nexus One unpacked, note the awesome android logo on the pouch</p></div>
<p><strong>Back Story</strong></p>
<p>Got a questionable email from Google (02/03/2010 23:47):</p>
<blockquote><p>
Subject: Device Seeding Program for Top Android Market Developers<br />
From: android-market-seeding@google.com </p>
<p> Due to your contribution to the success of Android Market, we would like to present you with a brand new Android device as part of our developer device seeding program. You are receiving this message because you&#8217;re one of the top developers in Android Market with one or more of your applications having a 3.5 star or higher rating and more than 5,000 unique downloads. </p>
<p> In order to receive this device, you must click through to this site, read the terms and conditions of the offer and fill out the registration form to give us your current mailing address so that we can ship your device. </p>
<p> You will receive either a Verizon Droid by Motorola or a Nexus One. Developers with mailing addresses in the US will receive either a Droid or Nexus one, based on random distribution. Developers from Canada, EU, and the EEA states (Norway, Lichtenstein), Switzerland, Hong Kong, Taiwan, and Singapore will receive a Nexus One. Developers with mailing addresses in countries not listed above will not receive a phone since these phones are not certified to be used in other countries. </p>
<p> We hope that you will enjoy your new device and continue to build more insanely popular apps for Android! </p>
<p> Thanks,<br />
 Eric Chu<br />
 Android Mobile Platform </p>
<p> Google, Inc.<br />
 1600 Amphitheater Parkway<br />
 Mountain View, CA 94043 </p>
<p> NOTE: You have received this mandatory email to notify you about an important update to the status of your Android account.
</p></blockquote>
<p>Initially I thought this was a scam, and searched the internet to check. Thankfully I came across a thread in Google forums of other people also sceptical about this email however it turned out to be legitimate (also confirmed by romainguy and others on twitter)</p>
<p>I then got a confirmation (06/03/2010):</p>
<blockquote><p>Subject:Android Market Device Seeding Program Confirmation<br />
From: Android Market Device Seeding Program <android-market-seeding@google.com></p>
<p>Dear Matthew,<br />
Weâ€™ve received your information for the Android Market Device Seeding Program and have successfully validated the Google Order Number from your developer account.<br />
Your information will now be sent to our shipping partner for order processing. Just to confirm, the information we received from you was:<br />
Matthew Rollings</p>
<address>
<phone number>
<p>If you need to make any changes to your information above, please contact us at android-market-seeding@google.com as soon as possible. Otherwise, you should receive your phone in 2-4 weeks!<br />
On behalf of the Android team,<br />
 Thanks, and happy coding!<br />
Google, Inc.<br />
 1600 Amphitheater Parkway<br />
 Mountain View, CA 94043</p></blockquote>
<p>I then received phone the phone on 29/04/2010 ~11:10. This is a lot later (3 weeks and 6 days) than the 2-4 weeks estimated for delivery, however this is believed to have been the fault of the shipping company Google were using.</p>
<p><strong>Photos</strong></p>
<div id="attachment_860" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_letter/" rel="attachment wp-att-860"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_letter-600x449.png" alt="Google device seeding nexus one letter" title="Google device seeding nexus one letter" width="600" height="449" class="size-medium wp-image-860" /></a><p class="wp-caption-text">Google device seeding nexus one letter</p></div>
<div id="attachment_861" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_box/" rel="attachment wp-att-861"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_box-600x800.png" alt="Nexus One box" title="Nexus One box" width="600" height="800" class="size-medium wp-image-861" /></a><p class="wp-caption-text">Nexus One box</p></div>
<div id="attachment_862" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_box2/" rel="attachment wp-att-862"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_box2-600x559.png" alt="Nexus One box with lid off" title="Nexus One box with lid off" width="600" height="559" class="size-medium wp-image-862" /></a><p class="wp-caption-text">Nexus One box with lid off</p></div>
<div id="attachment_864" class="wp-caption aligncenter" style="width: 428px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one/" rel="attachment wp-att-864"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one-418x800.png" alt="Nexus One" title="Nexus One" width="418" height="800" class="size-medium wp-image-864" /></a><p class="wp-caption-text">Nexus One, appologies for terrible photography skills</p></div>
<div id="attachment_865" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_androidears/" rel="attachment wp-att-865"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_androidears-600x565.png" alt="Nexus One handsfree earphones with logo" title="Nexus One handsfree earphones with logo" width="600" height="565" class="size-medium wp-image-865" /></a><p class="wp-caption-text">Nexus One handsfree earphones with logo</p></div>
<p>Note: I will probably update this post with better photos and photos of the phone in action, or possibly even give a review of how awesome the phone is (and also how to get the internet working on o2 UK).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Android: Grouping onClickListeners together by implementation in an activity</title>
		<link>http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 00:06:16 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=857</guid>
		<description><![CDATA[Here is a quick tip for better organisation of your program by grouping all onClickListeners into a simple switch statement. The problem If you have lots of buttons or view that you are linking to OnClickListener events you can quickly end up with some cumbersome code. This can be changed very simply by implementing a [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a quick tip for better organisation of your program by grouping all onClickListeners into a simple switch statement.</p>
<p><strong>The problem</strong><br />
If you have lots of buttons or view that you are linking to OnClickListener events you can quickly end up with some cumbersome code. This can be changed very simply by implementing a method in your activity and switching between View ID&#8217;s. </p>
<p>Below is an example the typical method for creating an OnClickListener for a View.</p>
<pre name="code" class="java">

final ImageButton Ibutton = (ImageButton) findViewById(R.id.button_1);
Ibutton.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		Toast.makeText(testActivity.this, "Button 1 pressed ", Toast.LENGTH_SHORT).show();
	}
});

final ImageButton Ibutton2 = (ImageButton) findViewById(R.id.button_2);
Ibutton2.setOnClickListener(new OnClickListener() {
	 public void onClick(View v) {
		Toast.makeText(testActivity.this, "Button 2 pressed", Toast.LENGTH_SHORT).show();
	}
});
</pre>
<p><strong>The Solution</strong><br />
We can get our activity to handle the OnClick events itself, we do this we implementing OnClickListener:</p>
<pre name="code" class="java">
public class testActivity extends Activity implements OnClickListener {
</pre>
<p>If your write this in eclipse you can hover over the error this produces and click Add unimplemented methods to automatically create a stub for the next part.</p>
<div id="attachment_858" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/onclicklistner/" rel="attachment wp-att-858"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/onclicklistner-600x115.png" alt="eclipse auto suggesting to implement the onclicklistener method" title="eclipse auto suggesting to implement the onclicklistener method" width="600" height="115" class="size-medium wp-image-858" /></a><p class="wp-caption-text">eclipse auto suggesting to implement the onclicklistener method</p></div>
<p>We now create our buttons similar to before, but for the setOnClickListener we pass this as an argument, so that our implemented method is called.</p>
<pre name="code" class="java">

ImageButton Ibutton = (ImageButton) findViewById(R.id.button_1);
Ibutton.setOnClickListener(this);      

ImageButton Ibutton2 = (ImageButton) findViewById(R.id.button_2);
Ibutton2.setOnClickListener(this);      
</pre>
<p>We now create the implemented method for our activity (onClick) and we use a switch statement to find which View fired the onclick event and preform an action accordingly.</p>
<pre name="code" class="java">

@Override
public void onClick(View v) {
	switch(v.getId()){
	case R.id.button_1:
		// action to preform on button 1
		Toast.makeText(testActivity.this, "Button 1 pressed ", Toast.LENGTH_SHORT).show();
		break;
	case R.id.button_2:
		// action to preform on button 1
		Toast.makeText(testActivity.this, "Button 2 pressed ", Toast.LENGTH_SHORT).show();
		break;
	}
}		
</pre>
<p>And it&#8217;s as simple as that!<br />
Feel free to post comments or questions</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: Context menu example (on long press, gridview)</title>
		<link>http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 10:41:44 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=582</guid>
		<description><![CDATA[I received several requests regarding how I created a context menu (the menu activated on a long press) using a gridview and how to call functions such as saving a sound file from this. So I have created a quick example to explain this: Tutorial To implement a context menu (long press menu) you first [...]]]></description>
			<content:encoded><![CDATA[<p>I received several requests regarding how I created a context menu (the menu activated on a long press) using a gridview and how to call functions such as saving a sound file from this. So I have created a quick example to explain this:</p>
<p><strong>Tutorial</strong></p>
<p>To implement a context menu (long press menu) you first need to include the following imports:</p>
<pre name="code" class="java">
import android.view.ContextMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
</pre>
<p>We start a very simple project, with the layout having a single button named button_example:</p>
<div id="attachment_854" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cm1/" rel="attachment wp-att-854"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cm1.png" alt="Android context menu example" title="Android context menu example" width="320" height="484" class="size-full wp-image-854" /></a><p class="wp-caption-text">Android context menu example</p></div>
<p>We then use registerForContextMenu in the onCreate of the activity to tell android that we want this view to create a menu when it is long pressed. This is not limited to buttons, this will work for other views too. You must register each view that you want to have associated with the context menu.</p>
<pre name="code" class="java">
Button btn = (Button) findViewById(R.id.button_example);
registerForContextMenu(btn);
</pre>
<p>You then need to override the onCreateContextMenu method to create the menu:</p>
<pre name="code" class="java">
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
	super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("Context Menu");
		menu.add(0, v.getId(), 0, "Action 1");
		menu.add(0, v.getId(), 0, "Action 2");
	}
</pre>
<div id="attachment_852" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cm2/" rel="attachment wp-att-852"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cm2.png" alt="android context menu example" title="android context menu example" width="320" height="484" class="size-full wp-image-852" /></a><p class="wp-caption-text">android context menu example</p></div>
<p>And override onContextItemSelected to preform the action when an option is selected from this menu:</p>
<pre name="code" class="java">
    @Override
	public boolean onContextItemSelected(MenuItem item) {
       	if(item.getTitle()=="Action 1"){function1(item.getItemId());}
    	else if(item.getTitle()=="Action 2"){function2(item.getItemId());}
    	else {return false;}
	return true;
	}
</pre>
<p>function1 and function2 are just place-holders at the moment that toast a message when they are used. In the above example we are choosing between Action 1 and Action 2 which define which function will be run when an item is selected. We have passed the ID of the view through the context menu and into this function so we can tell what the user was pressing when the context menu was created.</p>
<div id="attachment_853" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cm3/" rel="attachment wp-att-853"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cm3.png" alt="calling a function after a context menu item was pressed" title="calling a function after a context menu item was pressed" width="320" height="484" class="size-full wp-image-853" /></a><p class="wp-caption-text">calling a function after a context menu item was pressed</p></div>
<p><strong>Examples</strong></p>
<p>If you create a gridview and give each item a unique ID then you can use this method to preform actions based on each item. This is the method I use for my soundboard applications to save the sounds to the SD card as a notification or ringtone:</p>
<div id="attachment_855" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cssb_cm/" rel="attachment wp-att-855"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cssb_cm.png" alt="counterstrike 1.6 soundboard context menu" title="counterstrike 1.6 soundboard context menu" width="320" height="482" class="size-full wp-image-855" /></a><p class="wp-caption-text">counterstrike 1.6 soundboard context menu</p></div>
<div id="attachment_856" class="wp-caption aligncenter" style="width: 331px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/utsb_cm/" rel="attachment wp-att-856"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/utsb_cm.png" alt="Unreal Tournament soundboard context menu" title="Unreal Tournament soundboard context menu" width="321" height="481" class="size-full wp-image-856" /></a><p class="wp-caption-text">Unreal Tournament soundboard context menu</p></div>
<p><strong>Source</strong></p>
<p>Below is the source code:</p>
<pre name="code" class="java">
package com.contextmenu.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;

public class test extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button) findViewById(R.id.button_example);
        registerForContextMenu(btn);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
	super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("Context Menu");
		menu.add(0, v.getId(), 0, "Action 1");
		menu.add(0, v.getId(), 0, "Action 2");
	}

    @Override
	public boolean onContextItemSelected(MenuItem item) {
       	if(item.getTitle()=="Action 1"){function1(item.getItemId());}
    	else if(item.getTitle()=="Action 2"){function2(item.getItemId());}
    	else {return false;}
	return true;
	}

    public void function1(int id){
    	Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();
    }
    public void function2(int id){
    	Toast.makeText(this, "function 2 called", Toast.LENGTH_SHORT).show();
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Wordcube feedback</title>
		<link>http://www.stealthcopter.com/blog/2010/03/wordcube-feedback/</link>
		<comments>http://www.stealthcopter.com/blog/2010/03/wordcube-feedback/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 00:31:14 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[WordCube]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=783</guid>
		<description><![CDATA[This page was created for feedback from users of wordcube available via the wordcube website or as an app for android phones (available in market). Filling in these polls and leaving feedback will help improve wordcube for everyone. Thanks for your feedback. Please post any bugs, suggestions, complaints or ideas below.]]></description>
			<content:encoded><![CDATA[<p>This page was created for feedback from users of wordcube available via the <a href="http://www.stealthcopter.com/wordcube">wordcube website</a> or as an app for android phones (available in market). Filling in these polls and leaving feedback will help improve wordcube for everyone.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p>Thanks for your feedback. Please post any bugs, suggestions, complaints or ideas below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/03/wordcube-feedback/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Supporting multiple phones and screensizes in your android applications</title>
		<link>http://www.stealthcopter.com/blog/2010/02/supporting-multiple-phones-and-screensizes-in-your-android-applications/</link>
		<comments>http://www.stealthcopter.com/blog/2010/02/supporting-multiple-phones-and-screensizes-in-your-android-applications/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 22:38:33 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=655</guid>
		<description><![CDATA[When releasing an android application it is often desirable to release your application to the largest amount of users as possible. By developing an application with android 1.5 as the target, later versions are automatically supported (1.6, 2.0, and 2.1). However different screen-sizes were introduced with android 1.6 so by default an application will not [...]]]></description>
			<content:encoded><![CDATA[<p>When releasing an android application it is often desirable to release your application to the largest amount of users as possible. By developing an application with android 1.5 as the target, later versions are automatically supported (1.6, 2.0, and 2.1). However different screen-sizes were introduced with android 1.6 so by default an application will not support smaller screens (larger screens are automatically supported). </p>
<p><strong>Android Versions Marketshare</strong><br />
The image below shows the current market share for the different version of android:</p>
<div id="attachment_660" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.stealthcopter.com/blog/2010/02/supporting-multiple-phones-and-screensizes-in-your-android-applications/android-1-6-users-access-the-android-market-most-2/" rel="attachment wp-att-660"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/02/Android-1-6-Users-Access-the-Android-Market-Most-2.jpg" alt="Android version percentages" title="Android_version_percentages" width="400" height="400" class="size-full wp-image-660" /></a><p class="wp-caption-text">Android version marketshare</p></div>
<p><code></p>
<table>
<tr>
<td>Android Platform</td>
<td>Percentage of Devices</td>
</tr>
<tr>
<td>1.1</td>
<td>0.3%</td>
</tr>
<tr>
<td>1.5</td>
<td>27.7%</td>
</tr>
<tr>
<td>1.6</td>
<td>54.2%</td>
</tr>
<tr>
<td>2.0</td>
<td>2.9%</td>
</tr>
<tr>
<td>2.0.1</td>
<td>14.8%</td>
</tr>
</table>
<p></code></p>
<p>Devices with small screens include the following phones T-Mobile G1, Samsung I7500, and the HTC Tattoo. Unfortunately I cannot find any statistics regarding the percentage of small screen android users (if you can please let me know). However as the fix is very simple it seems stupid not to.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.<br />
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p><strong>Adding Support</strong><br />
To add support for different screen sizes we need to add a supports-screens tag in our android_manifest.xml. This should look like the following:</p>
<pre name="code" class="xml">
  &lt;supports-screens
          android:largeScreens="true"
          android:normalScreens="true"
          android:smallScreens="true"
          android:anyDensity="false" /&gt;
</pre>
<p>This tells android that the application should work on large, normal and small screens. Note that only setting small to false will prevent it from been visible in the market to small screened phones, for normal and large it will simply change the method of which android interprets the display of this application. anyDensity  fix me</p>
<p>However in order to use the supports-screens tag the target of your application must be android 1.6 (or Sdk version 4). We can allow our program which is now targetted for android 1.6 still be avaliable for android 1.5 (Sdk version 3) by adding android:minSdkVersion=&#8221;3&#8243; to our uses-sdk tag.</p>
<pre name="code" class="xml">
&lt;uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/&gt;
</pre>
<p>Now your application can be built for 1.6 supporting smaller screen sizes and still work on 1.5. </p>
<p><strong>Demonstration</strong><br />
Below are screenshots from two AVD&#8217;s, one with a normal screen size, and one with a small screen size:</p>
<div id="attachment_691" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/02/supporting-multiple-phones-and-screensizes-in-your-android-applications/android_small_screen/" rel="attachment wp-att-691"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/02/android_small_screen-600x388.png" alt="android small screen wordcube" title="android_small_screen" width="600" height="388" class="size-medium wp-image-691" /></a><p class="wp-caption-text">small screen android AVD running wordcube</p></div>
<div id="attachment_692" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/02/supporting-multiple-phones-and-screensizes-in-your-android-applications/android_small_medium/" rel="attachment wp-att-692"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/02/android_small_medium-600x502.png" alt="android medium screen wordcube" title="android_medium_screen" width="600" height="502" class="size-medium wp-image-692" /></a><p class="wp-caption-text">Medium screen android AVD running wordcube</p></div>
<p><strong>Note: Eclipse bug</strong><br />
Unfortunately eclipse currently does not acknowledge minSdkVersion and will not give you the option to test your application in any android virtual devices (AVD&#8217;s), while this is not fixed you can manually install the package into your AVD. For this you need to know the name of your emulator instance, to do this first run the AVD and then use the followin command to find out the name.</p>
<pre name="code" class="bash">
$adb devices
List of devices attached
emulator-5554   device
</pre>
<p>So we can see that the emulator instance I need is called emulator-5554. We can now use adb to install a package into this emulator. The below example shows installing wordcubefree from the bin folder in my project to my AVD using adb.</p>
<pre name="code" class="bash">
adb -s emulator-5554 install ~/android/workspace/WordCubeFree/bin/WordCubeFree.apk
1019 KB/s (39683 bytes in 0.038s)
Can't dispatch DDM chunk 46454154: no handler defined
Can't dispatch DDM chunk 4d505251: no handler defined
        pkg: /data/local/tmp/WordCubeFree.apk
Success
</pre>
<p>Note that this will fail if the application is already installed and you will need to uninstall the application before using this command (if anyone knows a switch to force install or alternative method please let me know)</p>
<p><strong>Going Further</strong><br />
It is possible to delve into this is more detail by providing layouts for small, medium and large screen sizes. This can be explored in more detail in the <a href="http://developer.android.com/guide/practices/screens_support.html">google dev support guide</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/02/supporting-multiple-phones-and-screensizes-in-your-android-applications/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android: Using SVN with your app&#8217;s project (and eclipse)</title>
		<link>http://www.stealthcopter.com/blog/2010/02/android-using-svn-with-your-apps-project-and-eclipse/</link>
		<comments>http://www.stealthcopter.com/blog/2010/02/android-using-svn-with-your-apps-project-and-eclipse/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 17:04:15 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=513</guid>
		<description><![CDATA[When creating any non-trivial program using a versioning system is essential, especially when working in part of a group. This guide aims to be a quick tutorial to the SVN (subversion) tool for versioning and how to use it with an android project. Assumptions You will need SVN installed on your computer. This can be [...]]]></description>
			<content:encoded><![CDATA[<p>When creating any non-trivial program using a versioning system is essential, especially when working in part of a group. This guide aims to be a quick tutorial to the SVN (subversion) tool for versioning and how to use it with an android project.</p>
<p><strong>Assumptions</strong></p>
<ul>
<li>
You will need SVN installed on your computer. This can be done using your package manager or by the following command in ubuntu / debian based systems:</p>
<pre name="code" class="bash">sudo apt-get install subversion</pre>
</li>
<li>
You already have an SVN repository configured. If not please view a tutorial like <a href="http://www.systhread.net/texts/200607subver.php">this</a> or if you have a nice webhost like me (thanks <a href="http://www.dreamhost.com/r.cgi?543037">dreamhost</a> <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) there may be a simple tool to do this automatically for you in your panel.
</li>
</ul>
<p><strong></strong></p>
<p><strong>Note</strong><br />
Don&#8217;t include the files inside /bin or /gen as they are just build from the source code and will simply fill up a lot space in your SVN. But do include the folders themselves as the project will fail to build without them.</p>
<p><strong>Command line (recommended)</strong><br />
For SVN, I am a great fan of the command line. From the few SVN GUI applications that I have used in the past I can recommend Turtoise SVN for windows and kdesvn for linux (kde) but I still prefer the command line.</p>
<p>The following code will checkout the project from your server. This will create a new folder called &#8220;projectname&#8221; on your computer and download the project from your server (at this point it is most likely an empty folder).</p>
<pre name="code" class="bash">
# Checkout the SVN directory
svn co svn.yourdomain.com/projectname projectname
</pre>
<p>You can then copy or create your android project in this directory. In our project folder there are two folders which contain generated files (as opposed to source files) there is no point uploading these to the svn as you will simply take up space and bandwidth. Before you decided to upload your changes to the server you should empty the bin and gen folders:</p>
<pre name="code" class="bash">
# Empty bin and gen folders
rm -rf ./projectname/bin/*
rm -rf ./projectname/gen/*
</pre>
<p>Each time you add a new file to the project you will need to add (`svn add filename` for single files or `svn add *` for all files):</p>
<pre name="code" class="bash">
# Tell SVN we want to be versioning these files
svn add projectname/*
</pre>
<p>When you are happy with your changes you can commit (`svn commit -m &#8220;message&#8221;`) your changes to the svn to create a new version, it is mandatory to include a message with each revision and it is best to be as detailed as possible with the changes made. This makes it much easier to hunt down where a bug or regression was introduced.</p>
<pre name="code" class="bash">
# Save the changes and upload to repository
svn commit -m "Initial import of projectname"
</pre>
<p>Each time you commit or wish to upgrade what is stored locally to the latest version on the server you need to use the following:</p>
<pre name="code" class="bash">
# Update the locally stored version
svn update projectname
</pre>
<p><strong>Further points</strong><br />
Eclipse has a plugin to manage SVN download and install instructions can be found <a href="http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/02/android-using-svn-with-your-apps-project-and-eclipse/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to tell android which volume (media/ringtone etc.) should be controlled by your app</title>
		<link>http://www.stealthcopter.com/blog/2010/02/how-to-tell-android-which-volume-mediaringtone-etc-should-be-controlled-by-your-app/</link>
		<comments>http://www.stealthcopter.com/blog/2010/02/how-to-tell-android-which-volume-mediaringtone-etc-should-be-controlled-by-your-app/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 21:14:39 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=602</guid>
		<description><![CDATA[In my android apps I was getting annoying problems that whilst playing sound the volume buttons would control the media volume, but when no sound was playing they would control the ringtone volume. I found the following by trial and error, hopefully this post will help people with the same problem. This is done by [...]]]></description>
			<content:encoded><![CDATA[<p>In my android apps I was getting annoying problems that whilst playing sound the volume buttons would control the media volume, but when no sound was playing they would control the ringtone volume. I found the following by trial and error, hopefully this post will help people with the same problem.</p>
<p>This is done by placing a call of setVolumeControlStream in the onCreate part of your activity which takes on of the following values</p>
<ul>
<li>AudioManager.STREAM_MUSIC</li>
<li>AudioManager.STREAM_RING</li>
<li>AudioManager.STREAM_ALARM</li>
<li>AudioManager.STREAM_NOTIFICATION</li>
<li>AudioManager.STREAM_SYSTEM</li>
<li>AudioManager.STREAM_VOICECALL</li>
</ul>
<p>Below shows the code required to set your applications default volume control to any of the above values:</p>
<p><strong>Media Volume</strong></p>
<pre name="code" class="java">
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
</pre>
<p><strong>Ringtone Volume</strong></p>
<pre name="code" class="java">
this.setVolumeControlStream(AudioManager.STREAM_RING);
</pre>
<p><strong>Alarm Volume</strong></p>
<pre name="code" class="java">
this.setVolumeControlStream(AudioManager.STREAM_ALARM);
</pre>
<p><strong>Notification Volume</strong></p>
<pre name="code" class="java">
this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION);
</pre>
<p><strong>System Volume</strong></p>
<pre name="code" class="java">
this.setVolumeControlStream(AudioManager.STREAM_SYSTEM);
</pre>
<p><strong>Voicecall Volume</strong></p>
<pre name="code" class="java">
this.setVolumeControlStream(AudioManager.STREAM_VOICECALL);
</pre>
<p>I imagine this is also possible via and XML settings, if anyone knows of this I&#8217;d be very grateful to know how!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/02/how-to-tell-android-which-volume-mediaringtone-etc-should-be-controlled-by-your-app/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Android: Unreal Tournament SoundBoard</title>
		<link>http://www.stealthcopter.com/blog/2010/01/android-unreal-tournament-soundboard/</link>
		<comments>http://www.stealthcopter.com/blog/2010/01/android-unreal-tournament-soundboard/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 15:45:29 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=536</guid>
		<description><![CDATA[Following the popularity of my counter-strike 1.6 soundboard and requests for the &#8220;HEADSHOT&#8221; noise for it, I have created an Unreal Tournament soundboard (from which the headshot sound originates). Sounds: Features all of the following sounds: dominating double kill first blood god like headshot holy shit killing spree ludicrous kill mega kill monster kill multi [...]]]></description>
			<content:encoded><![CDATA[<p>Following the popularity of my counter-strike 1.6 soundboard and requests for the &#8220;HEADSHOT&#8221; noise for it, I have created an Unreal Tournament soundboard (from which the headshot sound originates).</p>
<p><strong>Sounds:</strong><br />
Features all of the following sounds:</p>
<ul>
<li>dominating</li>
<li>double kill</li>
<li>first blood</li>
<li>god like</li>
<li>headshot</li>
<li>holy shit</li>
<li>killing spree</li>
<li>ludicrous kill</li>
<li>mega kill</li>
<li>monster kill</li>
<li>multi kill</li>
<li>play</li>
<li>rampage</li>
<li>ultra kill</li>
<li>unstoppable</li>
<li>wicked sick</li>
</ul>
<p><strong>Screenshots</strong><br />
The following are screenshots from the application:</p>
<div id="attachment_538" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/UTsoundboard_ss1.png"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/UTsoundboard_ss1.png" alt="unreal tournament soundboard" title="UTsoundboard_ss1" width="320" height="480" class="size-full wp-image-538" /></a><p class="wp-caption-text">unreal tournament soundboard</p></div>
<div id="attachment_539" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/UTsoundboard_ss2.png"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/UTsoundboard_ss2.png" alt="Unreal tournament soundboard" title="UTsoundboard_ss2" width="320" height="480" class="size-full wp-image-539" /></a><p class="wp-caption-text">Unreal Tournament Soundboard 2</p></div>
<p><strong>Download</strong><br />
Unreal Tournament SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using the download link</p>
<p>Android: <a href="market://details/?id=com.stealthcopter.utsoundboard">UTsoundboard</a><br />
Download: <a href="http://www.stealthcopter.com/android/apps/utsoundboard/utsoundboard.apk">UTsoundboard download</a></p>
<p>If you enjoyed this please leave feedback for me either here or on the market. Comments, suggestions and constructive criticism is also welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/01/android-unreal-tournament-soundboard/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Android: Saving a sound file to SD from resource and setting as ringtone</title>
		<link>http://www.stealthcopter.com/blog/2010/01/android-saving-a-sound-file-to-sd-from-resource-and-setting-as-ringtone/</link>
		<comments>http://www.stealthcopter.com/blog/2010/01/android-saving-a-sound-file-to-sd-from-resource-and-setting-as-ringtone/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 23:26:46 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=559</guid>
		<description><![CDATA[Quite a few people have been asking how to save a file to the SD card in order to register it as a ringtone. The following example creates a function that will save a resource to the SD card (ie: from R.raw.soundfile to /sdcard/media/audio/ringtones/soundfile.wav) and register it as a ringtone. I have split this example [...]]]></description>
			<content:encoded><![CDATA[<p>Quite a few people have been asking how to save a file to the SD card in order to register it as a ringtone. The following example creates a function that will save a resource to the SD card (ie: from R.raw.soundfile to /sdcard/media/audio/ringtones/soundfile.wav) and register it as a ringtone. </p>
<p>I have split this example into two parts, the first part goes through the code a section at a time with a brief explanation of what it does, the second half is just the code that you can copy and paste and then edit to your hearts content.</p>
<p><strong>Parts</strong></p>
<p>We first setup our function to return a boolean depicting if we have failed or if we are successful. We accept in an integer which corresponds to the raw sound file.</p>
<pre name="code" class="java">
public boolean saveas(int ressound){

}
</pre>
<p>So this function would be called in the following fashion:</p>
<pre name="code" class="java">saveas(R.raw.soundfile);</pre>
<p>or utilising its boolean return:</p>
<pre name="code" class="java">
if (saveas(R.raw.soundfile)){
// Code if successful
}
else
{
// Code if unsuccessful
}
</pre>
<p>The following chunk of code creates an inputstream from the raw sound resource and loads it into a buffer. We add in the mandatory try/catch clause around these operations and return false if an exception is raised (to indicate failure to the rest of our program and to prevent trying to continue act upon this sound).</p>
<pre name="code" class="java">
 byte[] buffer=null;
 InputStream fIn = getBaseContext().getResources().openRawResource(ressound);
 int size=0;

 try {
  size = fIn.available();
  buffer = new byte[size];
  fIn.read(buffer);
  fIn.close();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }
</pre>
<p>The following saves the buffer to a file on the SD card. It first ensures the folder exists and if not it is created. Then as before the writing operations are surrounded with try/catches</p>
<pre name="code" class="java">
 String path="/sdcard/media/audio/ringtones/";
 String filename="examplefile"+".wav";

 boolean exists = (new File(path)).exists();
 if (!exists){new File(path).mkdirs();}

 FileOutputStream save;
 try {
  save = new FileOutputStream(path+filename);
  save.write(buffer);
  save.flush();
  save.close();
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  return false;
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }
</pre>
<p>The following code sends an intent to tell the Media Scanner that we have added a new file, and sets up its properties in the media database:</p>
<pre name="code" class="java">
 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));

 File k = new File(path, filename);

 ContentValues values = new ContentValues();
 values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
 values.put(MediaStore.MediaColumns.TITLE, "exampletitle");
 values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/wav");
 values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
 values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
 values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
 values.put(MediaStore.Audio.Media.IS_ALARM, true);
 values.put(MediaStore.Audio.Media.IS_MUSIC, false);

 //Insert it into the database
 this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);
</pre>
<p><strong>Final code</strong><br />
Putting all this code together gives us our final functions:</p>
<pre name="code" class="java">
public boolean saveas(int ressound){
 byte[] buffer=null;
 InputStream fIn = getBaseContext().getResources().openRawResource(ressound);
 int size=0;

 try {
  size = fIn.available();
  buffer = new byte[size];
  fIn.read(buffer);
  fIn.close();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }

 String path="/sdcard/media/audio/ringtones/";
 String filename="examplefile"+".wav";

 boolean exists = (new File(path)).exists();
 if (!exists){new File(path).mkdirs();}

 FileOutputStream save;
 try {
  save = new FileOutputStream(path+filename);
  save.write(buffer);
  save.flush();
  save.close();
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  return false;
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }    

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));

 File k = new File(path, filename);

 ContentValues values = new ContentValues();
 values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
 values.put(MediaStore.MediaColumns.TITLE, "exampletitle");
 values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/wav");
 values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
 values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
 values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
 values.put(MediaStore.Audio.Media.IS_ALARM, true);
 values.put(MediaStore.Audio.Media.IS_MUSIC, false);

 //Insert it into the database
 this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);

 return true;
}
</pre>
<p>Comments, suggestions etc. are always welcome. Hope this has been helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/01/android-saving-a-sound-file-to-sd-from-resource-and-setting-as-ringtone/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Android: Opening a webpage in your app using Intents</title>
		<link>http://www.stealthcopter.com/blog/2010/01/android-opening-a-webpage-in-your-app-from-using-intents/</link>
		<comments>http://www.stealthcopter.com/blog/2010/01/android-opening-a-webpage-in-your-app-from-using-intents/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 21:20:01 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=545</guid>
		<description><![CDATA[Opening up a website from an application in android is very simple thanks to &#8220;Intents&#8221;. An Intent is a request to android use an application to preform a task. The code below shows a very simple example of launching a browser to go to the wordcube website. Context context = getApplicationContext(); String url = "http://www.stealthcopter.com/wordcube"; [...]]]></description>
			<content:encoded><![CDATA[<p>Opening up a website from an application in android is very simple thanks to &#8220;Intents&#8221;. An Intent is a request to android use an application to preform a task. The code below shows a very simple example of launching a browser to go to the wordcube website.</p>
<pre name="code" class="java">
Context context = getApplicationContext();
String url = "http://www.stealthcopter.com/wordcube";
Intent i = new Intent(Intent.ACTION_VIEW);
Uri u = Uri.parse(url);
i.setData(u);
try {
  // Start the activity
  startActivity(i);
} catch (ActivityNotFoundException e) {
  // Raise on activity not found
  Toast toast = Toast.makeText(context, "Browser not found.", Toast.LENGTH_SHORT);
}
</pre>
<p>As pointed out in the comments, the context can be replaced by the activity itself, such as TestApp.this. eg:</p>
<pre name="code" class="java">
Toast toast = Toast.makeText(TestApp.this, "Browser not found.", Toast.LENGTH_SHORT);</pre>
<p>We have surrounded the activity with a try/catch which will be raised if android cannot find an application that will accept this intent, in this case a web-browser. It is highly unlikely that an android phone will not have a web-browser installed but it is a good practise to get into.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/01/android-opening-a-webpage-in-your-app-from-using-intents/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android: WordCube &#8211; Daily puzzle game</title>
		<link>http://www.stealthcopter.com/blog/2010/01/android-wordcube-daily-puzzle-game/</link>
		<comments>http://www.stealthcopter.com/blog/2010/01/android-wordcube-daily-puzzle-game/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 17:37:36 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[WordCube]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=454</guid>
		<description><![CDATA[Due to the success (and small amount of addiction) of my browser-based wordcube game (see here), I decided to make a WordCube application for android. Features Anagram / Wordsearch based puzzle Small file size (~100kb) and footprint Updated daily Share score with twitter integration (compete with friends) Saves your last attempts so you can continue [...]]]></description>
			<content:encoded><![CDATA[<p>Due to the success (and small amount of addiction) of my browser-based wordcube game (<a href="http://www.stealthcopter.com/wordcube">see here</a>), I decided to make a WordCube application for android.</p>
<p><strong>Features</strong></p>
<ul>
<li>Anagram / Wordsearch based puzzle</li>
<li>Small file size (~100kb) and footprint</li>
<li>Updated daily</li>
<li>Share score with twitter integration (compete with friends)</li>
<li>Saves your last attempts so you can continue at later time</li>
<li>This also means you can continue your last game offline</li>
<li>Several achievements can be unlocked (more to come, also looking for suggestions for achievements)</li>
</ul>
<div id="attachment_501" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/wordcube_ss1.png"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/wordcube_ss1.png" alt="wordcube screenshot" title="wordcube_ss1" width="320" height="480" class="size-full wp-image-501" /></a><p class="wp-caption-text">screenshot of wordcube</p></div>
<p><strong>Gameplay</strong><br />
Find as many words as possible using letters from the grid. The words must be 4 letters or more, contain the central letter and each letter may not be used more than once. There is at least one word that uses all of the letters in the cube.</p>
<p>The main interface is by tapping the letters in order to construct a word, but keyboards (and on screen keyboards) are also supported.</p>
<div id="attachment_502" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/WordCubePro_ss2.png"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/WordCubePro_ss2.png" alt="wordcube screenshot 2" title="WordCubePro_ss2" width="320" height="480" class="size-full wp-image-502" /></a><p class="wp-caption-text">Another wordcube screenshot</p></div>
<p><strong>Twitter Integration </strong><br />
Once you have attained all the words that you can, you can post your score to twitter and then compare with your friends to see how they did in comparison. In order to use this feature you need to have a twitter client installed, I would recommend twidroid.</p>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 345px"><a href="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/android_twidroid1.png"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/android_twidroid1.png" alt="wordcube twitter integration" title="android_twidroid" width="335" height="492" class="size-full wp-image-503" /></a><p class="wp-caption-text">Twitter integration in wordcube</p></div>
<p><strong>Download</strong><br />
WordCube can be downloaded from the market on your android phone either by searching for wordcube or following one the two android links below. To download the WordCube app from this website, follow the Web link.</p>
<p>Android: <a href="market://details/?id=com.sc.wordcubefree">WordCube Free</a><br />
Android: <a href="market://details/?id=com.sc.wordcubee">WordCube Pro</a> (only £1)<br />
Web: <a href="mhttp://www.stealthcopter.com/android/apps/wordcubefree/wordcubefree.apk">WordCube Free</a></p>
<p>The pro version is available for £1, with the money going to support the developer and the development and maintenance of this application. The pro version features all of the latest features and in the near future will support personal statistics to keep track of performance.</p>
<p>If you enjoyed this please leave feedback for me either here or on the market. Comments, suggestions and constructive criticism is also welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/01/android-wordcube-daily-puzzle-game/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android: Eclipse and problems with dynamic tables (adding rows)</title>
		<link>http://www.stealthcopter.com/blog/2010/01/android-eclipse-and-problems-with-dynamic-tables-adding-rows/</link>
		<comments>http://www.stealthcopter.com/blog/2010/01/android-eclipse-and-problems-with-dynamic-tables-adding-rows/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 21:42:48 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=494</guid>
		<description><![CDATA[When using TableLayout with LayoutParams Eclipse will automatically (and wrongly) add the following import: import android.view.ViewGroup.LayoutParams; However if you try to use this you will notice that nothing changes. You need to replace the import with the ollowingL import android.widget.TableRow.LayoutParams; Now if you rerun your code, you will see that your tables are updating. See [...]]]></description>
			<content:encoded><![CDATA[<p>When using TableLayout with LayoutParams Eclipse will automatically (and wrongly) add the following import:</p>
<pre name="code" class="python">
import android.view.ViewGroup.LayoutParams;
</pre>
<p>However if you try to use this you will notice that nothing changes. You need to replace the import with the ollowingL</p>
<pre name="code" class="python">
import android.widget.TableRow.LayoutParams;
</pre>
<p>Now if you rerun your code, you will see that your tables are updating. See below for an example of the code to generate a table</p>
<pre name="code" class="python">
int sizey=10;
int sizex=10;
int btnwidth=24;
TableLayout tl = (TableLayout)findViewById(R.id.MyTableLayout); 

for (int y=0;y&lt;sizey;y++){

// Rows
TableRow tr = new TableRow(this);
tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

//Cells
for (int x=0;x&lt;sizex;x++){
// Create new cell
	// new button
	Button b = new Button(this);
	b.setText(x+""+y);
	b.setLayoutParams(new LayoutParams(
		LayoutParams.FILL_PARENT,
		LayoutParams.WRAP_CONTENT));
	b.setHeight(btnwidth);
	b.setBackgroundResource(R.drawable.btn_blue);
	b.setOnClickListener(new PegOnClickListener(y,x));
	// add button to row
	tr.addView(b);
	}
// add row to layout
tl.addView(tr,new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/01/android-eclipse-and-problems-with-dynamic-tables-adding-rows/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Android: Blurring and dimming background windows from dialogs</title>
		<link>http://www.stealthcopter.com/blog/2010/01/android-blurring-and-dimming-background-windows-from-dialogs/</link>
		<comments>http://www.stealthcopter.com/blog/2010/01/android-blurring-and-dimming-background-windows-from-dialogs/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 22:32:03 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[WordCube]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=463</guid>
		<description><![CDATA[The android SDK has lots of nice goodies built in to make your applications look sexier. One such feature is the blurring of windows. This effect looks particularly nice if a background window is blurred while a dialog box is shown above which can really make it stand out. Below shows the application such an [...]]]></description>
			<content:encoded><![CDATA[<p>The android SDK has lots of nice goodies built in to make your applications look sexier. One such feature is the blurring of windows. This effect looks particularly nice if a background window is blurred while a dialog box is shown above which can really make it stand out. Below shows the application such an example; on the left is the default about box (for WordCube Pro) and on the right is with added blur and no dimming.</p>
<div id="attachment_466" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/android_dim_both.png"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/01/android_dim_both-300x221.png" alt="android blur dim, before, after" title="android_dim_both" width="300" height="221" class="size-medium wp-image-466" /></a><p class="wp-caption-text">android bluring and dimming effect before and after</p></div>
<p>I am using the AlterDialog.Builder to create my dialog, however this method will work with all kinds of dialog providing you can access it via getWindow.</p>
<pre name="code" class="java">
   dialog = new AlertDialog.Builder(WordCube.this)
   .setTitle(WordCube.this.getResources().getString(R.string.app_name))
   .setMessage(s)
   .setIcon(R.drawable.logo)
   .setPositiveButton(R.string.btn_close, null)
   .show();
</pre>
<p>Below shows the code needed to add blur and remove dimming of the background (as I think the blur looks nicer when the background is well lit).</p>
<pre name="code" class="java">
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.dimAmount=0.0f;
dialog.getWindow().setAttributes(lp);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
</pre>
<p>The blur is simply created using the last line (line 4) which sets a flag for the dialog telling android that we want windows below this one to be blurred. To achieve the dimming, we need to retrieve the layout parameters for the dialog window, set the dim amount to zero, update these parameters with setAttributes (lines 1-3).</p>
<p>Any comments, questions, or improvements please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/01/android-blurring-and-dimming-background-windows-from-dialogs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.971 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-07-30 09:58:24 -->
