<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-694908980388122055</id><updated>2026-06-27T23:55:01.996-07:00</updated><category term="web"/><category term="net"/><category term="Asus"/><category term="javascript"/><category term="google"/><category term="apple"/><category term="Toshiba"/><category term="Acer"/><category term="os x"/><category term="misc"/><category term="iphone"/><category term="web 2.0"/><category term="Dell"/><category term="ipad"/><category term="HP"/><category term="java"/><category term="mac"/><category term="Featured gadgets"/><category term="development"/><category term="lenovo"/><category term="New gadgets"/><category term="windows 7"/><category term="linux"/><category term="windows"/><category term="jquery"/><category term="Others Laptops"/><category term="Samsung"/><category term="php"/><category term="css"/><category term="Announcements"/><category term="Sony"/><category term="ajax"/><category term="android"/><category term="html"/><category term="tip"/><category term="mobile"/><category term="html5"/><category term="netbeans"/><category term="dojo"/><category term="firefox"/><category term="ios"/><category term="tablet"/><category term="Developers"/><category term="laptop"/><category term="Accessories"/><category term="Gateway"/><category term="MSI"/><category term="ruby"/><category term="amazon"/><category term="browser"/><category term="ipod/iphone"/><category term="unix"/><category term="app"/><category term="ebook"/><category term="win7tip"/><category term="gaming"/><category term="Acer Aspire One"/><category term="freebsd"/><category term="ipod"/><category term="open source"/><category term="learning"/><category term="microsoft"/><category term="movies"/><category term="mysql"/><category term="rss"/><category term="Fujitsu"/><category term="Gadget reviews"/><category term="Gigabyte"/><category term="Holiday gadgets"/><category term="cyber crimes"/><category term="nook"/><category term="osx"/><category term="security"/><category term="software"/><category term="sun"/><category term="ubuntu"/><category term="Mac Setup"/><category term="blogger"/><category term="design"/><category term="flash"/><category term="kindle"/><category term="news"/><category term="physics"/><category term="safari"/><category term="tutorial"/><category term="webkit"/><category term="wifi"/><category term="algorithmic trading"/><category term="career"/><category term="ecid shsh"/><category term="ecid shsh grabber"/><category term="emulator"/><category term="facebook"/><category term="humor"/><category term="introduction"/><category term="jailbreak"/><category term="javaee"/><category term="javafx"/><category term="jquerytip"/><category term="mactip"/><category term="matte"/><category term="mozilla"/><category term="pc"/><category term="programming"/><category term="seamonkey"/><category term="technology"/><category term="umbrella"/><category term="webtip"/><category term="wiki"/><category term="Axioo"/><category term="USB"/><category term="affiliate"/><category term="chrome"/><category term="codeigniter"/><category term="database"/><category term="dropbox"/><category term="ecid"/><category term="education"/><category term="eee"/><category term="games"/><category term="googletip"/><category term="ios5"/><category term="jdk7"/><category term="language"/><category term="leopard"/><category term="netbook"/><category term="quality control"/><category term="rails"/><category term="setup"/><category term="shsh"/><category term="social"/><category term="table"/><category term="tinytss"/><category term="training"/><category term="windows xp"/><category term="FORTRAN"/><category term="Tips"/><category term="apache"/><category term="applied technology"/><category term="blackberry"/><category term="bootcamp"/><category term="bugs"/><category term="cloud"/><category term="command line"/><category term="copenhagen"/><category term="css3"/><category term="epub"/><category term="fermilab"/><category term="help"/><category term="how to"/><category term="imap"/><category term="ipad 2"/><category term="ipad 3"/><category term="iphone restore"/><category term="javacript"/><category term="jruby"/><category term="lion"/><category term="macbook pro"/><category term="north denver"/><category term="privacy"/><category term="reader"/><category term="scaling"/><category term="science"/><category term="search"/><category term="shsh grabber"/><category term="solaris"/><category term="subversion"/><category term="thunderbird"/><category term="twitter"/><category term="ultrabook"/><category term="unlock"/><category term="unofficial carrier"/><category term="virtualbox"/><category term="vmware"/><category term="vpn"/><category term="3.0"/><category term="3.0.1"/><category term="3.1"/><category term="3.1 shsh"/><category term="3.1.1 shsh"/><category term="3.1.2 shsh"/><category term="3gs"/><category term="ACM"/><category term="Generation Y"/><category term="NetworkManager"/><category term="Others Netbooks"/><category term="PC-BSD"/><category term="Privacy Policy"/><category term="TOP 10"/><category term="TSS"/><category term="X11R6"/><category term="about"/><category term="activation"/><category term="amzon"/><category term="apm"/><category term="apps"/><category term="automobile"/><category term="bash"/><category term="blacksn0w"/><category term="blogger tips"/><category term="books"/><category term="boulder"/><category term="certification"/><category term="changes"/><category term="climate change"/><category term="cms"/><category term="combo"/><category term="coming soon"/><category term="comments"/><category term="commuting"/><category term="compiler"/><category term="cydia"/><category term="danish"/><category term="deals"/><category term="death"/><category term="denver"/><category term="display"/><category term="downgrade"/><category term="drive"/><category term="duckduckgo"/><category term="editor"/><category term="ejb"/><category term="electronic trading"/><category term="email"/><category term="events"/><category term="example"/><category term="faq"/><category term="features"/><category term="feynman"/><category term="firmware"/><category term="freenas"/><category term="frustrations"/><category term="geek"/><category term="general"/><category term="glassfish"/><category term="global warming"/><category term="gmail"/><category term="google+"/><category term="gphone"/><category term="graphics"/><category term="green computing"/><category term="hack"/><category term="hardware"/><category term="http"/><category term="iPhone os 3.1.3"/><category term="image"/><category term="inspiron"/><category term="intense debate"/><category term="ipad2"/><category term="iphone activate unofficial carrier"/><category term="iphone activation"/><category term="iphone downgrade"/><category term="iphone os"/><category term="ipod touch"/><category term="ipod touch 3g"/><category term="ipt3g"/><category term="itunes"/><category term="javadb"/><category term="javscript"/><category term="jkd7"/><category term="jobs"/><category term="jpa"/><category term="lamp"/><category term="language study"/><category term="linpus"/><category term="mabook"/><category term="macbook air"/><category term="mail"/><category term="media"/><category term="mouse"/><category term="music"/><category term="namespace"/><category term="nasa"/><category term="netbsd"/><category term="nexus"/><category term="nigeritis"/><category term="nostalgia"/><category term="object"/><category term="open office"/><category term="oracle"/><category term="peristence"/><category term="printf"/><category term="project management"/><category term="proxy"/><category term="rdesktop"/><category term="rdp"/><category term="reagon"/><category term="restore"/><category term="restore firmware"/><category term="saurik"/><category term="select"/><category term="skype"/><category term="soft activation"/><category term="spam"/><category term="sql"/><category term="starter"/><category term="startup"/><category term="static analysis"/><category term="swtor"/><category term="tech"/><category term="tool"/><category term="tour"/><category term="transmissions"/><category term="tsclient"/><category term="turing"/><category term="updates"/><category term="validation"/><category term="voice"/><category term="wallpapers"/><category term="webit"/><category term="windows 8"/><category term="windoze"/><category term="x120e"/><category term="xml"/><category term="xp"/><category term="yahoo"/><title type='text'>Update Area</title><subtitle type='html'>Lets Update</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2443</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5377533104177163456</id><published>2012-08-23T10:45:00.000-07:00</published><updated>2012-08-24T22:53:54.771-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows 8"/><title type='text'>Another Glowing Windows 8 Review</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; src=&quot;http://blueskyworkshop.com/images/blog/win-icons/MediaCenter.png&quot; /&gt;&lt;a href=&quot;http://www.pcgamesn.com/article/why-i-m-uninstalling-windows-8&quot;&gt;Tim Edwards at PCGamesN.com does not like Windows 8.&lt;/a&gt; He provides plenty of detail why. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sounds like this is not gonna pass &quot;can my parents use it&quot; test. I&#39;m definitely in the wait and see camp at this point in time.</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5377533104177163456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/another-glowing-windows-8-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5377533104177163456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5377533104177163456'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/another-glowing-windows-8-review.html' title='Another Glowing Windows 8 Review'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-2915032338880628497</id><published>2012-08-23T10:35:00.000-07:00</published><updated>2012-08-24T22:53:54.732-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="misc"/><category scheme="http://www.blogger.com/atom/ns#" term="net"/><title type='text'>Apocalypse Not: So just Suck it up People</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; src=&quot;http://blueskyworkshop.com/images/blog/256-Bus-Icons/Globe Internet.png&quot; /&gt;&lt;a href=&quot;http://www.wired.com/wiredscience/2012/08/ff_apocalypsenot&quot;&gt;This month&#39;s Wired magazine has a wonderful article on the coming Apocalypse or lack of one&lt;/a&gt;. The story debunks many of the Apocalypse myths and memes of the last 50 years. From oil shortages and running out of energy to the horrors of overpopulation. There must be a dozen examples of &quot;experts&quot; who&#39;s prediction of our demise has already come and gone. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Of course the author does miss the most likely end of the world... the Zombie Apocalypse. Which we all know from video games and TV shows, is inevitable. But I guess I will cut him slack on that one. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I guess we will be around for a while, better suck it up and soldier on.&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/2915032338880628497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/apocalypse-not-so-just-suck-it-up-people.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/2915032338880628497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/2915032338880628497'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/apocalypse-not-so-just-suck-it-up-people.html' title='Apocalypse Not: So just Suck it up People'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-6608647543090633486</id><published>2012-08-22T11:06:00.000-07:00</published><updated>2012-08-24T22:53:54.800-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mac"/><category scheme="http://www.blogger.com/atom/ns#" term="pc"/><title type='text'>A Keyboard for Messy Folks</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; src=&quot;http://blueskyworkshop.com/images/blog/win-icons/MediaCenter.png&quot; /&gt;Do you like to eat and drink while you code?  Well &lt;a href=&quot;http://news.cnet.com/8301-10797_3-57497912-235/logitech-comes-clean-with-$40-washable-keyboard/&quot;&gt;Logitech&#39;s fully washable keyboard&lt;/a&gt; is for you. Spilling soda is no longer quite the problem it was. </content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/6608647543090633486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/a-keyboard-for-messy-folks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/6608647543090633486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/6608647543090633486'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/a-keyboard-for-messy-folks.html' title='A Keyboard for Messy Folks'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-730380019985342375</id><published>2012-08-22T07:15:00.000-07:00</published><updated>2012-08-25T00:52:36.098-07:00</updated><title type='text'>Determine the best camera preview size</title><content type='html'>It&#39;a example to determine the best supported camera preview size, to have the biggest preview area.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAFuyDzwMFOs8kq739A9xG0D5YoCfXQ4xjGEhM2mXw8_NhsMrMzVMOD-uMG-YzRbGhbNwIhoELCnbZFRtk_6V3dfeblclN3Wov34pMfk3YDPU0oFUpo43h1UXMLmWbQwukTu-zz5ux5nEH/s1600/AndroidCamera_BestPreviewSize.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Determine the best camera preview size&quot; border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAFuyDzwMFOs8kq739A9xG0D5YoCfXQ4xjGEhM2mXw8_NhsMrMzVMOD-uMG-YzRbGhbNwIhoELCnbZFRtk_6V3dfeblclN3Wov34pMfk3YDPU0oFUpo43h1UXMLmWbQwukTu-zz5ux5nEH/s400/AndroidCamera_BestPreviewSize.png&quot; title=&quot;Determine the best camera preview size&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;package com.example.androidcamera;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import android.hardware.Camera;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.SurfaceHolder;&lt;br /&gt;import android.view.SurfaceView;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt; Camera myCamera;&lt;br /&gt; SurfaceView mySurfaceView;&lt;br /&gt; SurfaceHolder mySurfaceHolder;&lt;br /&gt; boolean isPreview;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.activity_main);&lt;br /&gt;        &lt;br /&gt;        isPreview = false;&lt;br /&gt;        mySurfaceView = (SurfaceView)findViewById(R.id.mypreview);&lt;br /&gt;        mySurfaceHolder = mySurfaceView.getHolder();&lt;br /&gt;        mySurfaceHolder.addCallback(mySurfaceCallback);&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    SurfaceHolder.Callback mySurfaceCallback&lt;br /&gt;    = new SurfaceHolder.Callback(){&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void surfaceChanged(SurfaceHolder holder, int format, int width,&lt;br /&gt;    int height) {&lt;br /&gt;   Camera.Parameters myParameters = myCamera.getParameters();&lt;br /&gt;   Camera.Size myBestSize = getBestPreviewSize(width, height, myParameters);&lt;br /&gt;   &lt;br /&gt;   if(myBestSize != null){&lt;br /&gt;    myParameters.setPreviewSize(myBestSize.width, myBestSize.height);&lt;br /&gt;    myCamera.setParameters(myParameters);&lt;br /&gt;    myCamera.startPreview();&lt;br /&gt;    isPreview = true;&lt;br /&gt;    &lt;br /&gt;    Toast.makeText(getApplicationContext(), &lt;br /&gt;      &quot;Best Size:\n&quot; +&lt;br /&gt;      String.valueOf(myBestSize.width) + &quot; : &quot; + String.valueOf(myBestSize.height), &lt;br /&gt;      Toast.LENGTH_LONG).show();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void surfaceCreated(SurfaceHolder holder) {&lt;br /&gt;   try {&lt;br /&gt;    myCamera.setPreviewDisplay(mySurfaceHolder);&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;    // TODO Auto-generated catch block&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void surfaceDestroyed(SurfaceHolder holder) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;     &lt;br /&gt;    };&lt;br /&gt;    &lt;br /&gt;    private Camera.Size getBestPreviewSize(int width, int height, Camera.Parameters parameters){&lt;br /&gt;     Camera.Size bestSize = null;&lt;br /&gt;     List&amp;lt;Camera.Size&amp;gt; sizeList = parameters.getSupportedPreviewSizes();&lt;br /&gt;     &lt;br /&gt;     bestSize = sizeList.get(0);&lt;br /&gt;     &lt;br /&gt;     for(int i = 1; i &amp;lt; sizeList.size(); i++){&lt;br /&gt;      if((sizeList.get(i).width * sizeList.get(i).height) &amp;gt;&lt;br /&gt;        (bestSize.width * bestSize.height)){&lt;br /&gt;       bestSize = sizeList.get(i);&lt;br /&gt;      }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     return bestSize;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt; @Override&lt;br /&gt; protected void onResume() {&lt;br /&gt;  super.onResume();&lt;br /&gt;  myCamera = Camera.open();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onPause() {&lt;br /&gt;  &lt;br /&gt;  if(isPreview){&lt;br /&gt;   myCamera.stopPreview();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  myCamera.release();&lt;br /&gt;  myCamera = null;&lt;br /&gt;  isPreview = false;&lt;br /&gt;  &lt;br /&gt;  super.onPause();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify the layout to have a SurfaceView for preview.&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;    xmlns:tools=&quot;http://schemas.android.com/tools&quot;&lt;br /&gt;    android:layout_width=&quot;match_parent&quot;&lt;br /&gt;    android:layout_height=&quot;match_parent&quot; &amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;SurfaceView&lt;br /&gt;        android:id=&quot;@+id/mypreview&quot;&lt;br /&gt;        android:layout_width=&quot;match_parent&quot;&lt;br /&gt;        android:layout_height=&quot;match_parent&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify AndroidManifest.xml to add permission of &quot;android.permission.CAMERA&quot;, and set android:screenOrientation=&quot;landscape&quot;.&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;    package=&quot;com.example.androidcamera&quot;&lt;br /&gt;    android:versionCode=&quot;1&quot;&lt;br /&gt;    android:versionName=&quot;1.0&quot; &amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;uses-sdk&lt;br /&gt;        android:minSdkVersion=&quot;8&quot;&lt;br /&gt;        android:targetSdkVersion=&quot;15&quot; /&amp;gt;&lt;br /&gt;    &amp;lt;uses-permission android:name=&quot;android.permission.CAMERA&quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;application&lt;br /&gt;        android:icon=&quot;@drawable/ic_launcher&quot;&lt;br /&gt;        android:label=&quot;@string/app_name&quot;&lt;br /&gt;        android:theme=&quot;@style/AppTheme&quot; &amp;gt;&lt;br /&gt;        &amp;lt;activity&lt;br /&gt;            android:name=&quot;.MainActivity&quot;&lt;br /&gt;            android:label=&quot;@string/title_activity_main&quot; &lt;br /&gt;            android:screenOrientation=&quot;landscape&quot;&amp;gt;&lt;br /&gt;            &amp;lt;intent-filter&amp;gt;&lt;br /&gt;                &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;&lt;br /&gt;            &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;        &amp;lt;/activity&amp;gt;&lt;br /&gt;    &amp;lt;/application&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://adf.ly/1677922/sites.google.com/site/androidersite/download/AndroidCamera_120822a.zip?attredirects=0&amp;d=1&quot;&gt;&lt;img style=&quot;width: 18px; height: 21px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFoRBwkjdrzqEnDNyjJlCIuxRUIniP6eI19lZg4OPT8GWnuLtNUpUVCJL1MEe1J4ZSFiokydyfX-X1_ibmOl4GGwquuHOXXBXzZFK-G7nqF5iOduLjl6KTB97N8L1g2ccyEYrMWKvWOXe/s200/icons_download.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5360544424610981522&quot; border=&quot;0&quot; /&gt;Download the files&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/730380019985342375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/determine-best-camera-preview-size.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/730380019985342375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/730380019985342375'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/determine-best-camera-preview-size.html' title='Determine the best camera preview size'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAFuyDzwMFOs8kq739A9xG0D5YoCfXQ4xjGEhM2mXw8_NhsMrMzVMOD-uMG-YzRbGhbNwIhoELCnbZFRtk_6V3dfeblclN3Wov34pMfk3YDPU0oFUpo43h1UXMLmWbQwukTu-zz5ux5nEH/s72-c/AndroidCamera_BestPreviewSize.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-8518347197037866798</id><published>2012-08-21T14:44:00.000-07:00</published><updated>2012-08-25T00:52:36.131-07:00</updated><title type='text'>Pro Android Augmented Reality (Professional Apress)</title><content type='html'>&lt;iframe src=&quot;http://rcm.amazon.com/e/cm?t=pointe&amp;o=1&amp;p=8&amp;l=as1&amp;asins=B008KKOJ40&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;Augmented reality (AR)&amp;nbsp;offers a&amp;nbsp;live direct or indirect view of a physical, real-world environment, where the elements and surroundings&amp;nbsp;are augmented by computer-generated sensory input such as graphics and GPS data. It makes a game more real. Your social media app puts you where want to be or go.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;&lt;em&gt;Pro Android Augmented Reality&lt;/em&gt;&amp;nbsp;walks you through the foundations of building an augmented reality application. From using various software and Android hardware sensors, such as an accelerometer or a magnetometer (compass), you&#39;ll learn the building blocks of augmented reality for both marker- and location-based apps.&lt;br /&gt;&lt;br /&gt;Case studies are included in this one-of-a-kind book, which pairs nicely with other Android development books.&amp;nbsp;After reading&amp;nbsp;&lt;em&gt;Pro Android Augmented Reality&lt;/em&gt;, you&#39;ll be able to build&amp;nbsp;augmented reality&amp;nbsp;rich media apps or&amp;nbsp;integrate all the best&amp;nbsp;augmented reality&amp;nbsp;into your&amp;nbsp;favorite Android smartphone and/or tablet.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 1em; margin: 0px 0px 0.25em;&quot;&gt;What you�ll learn&lt;/h3&gt;&lt;ul style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin: 20px; padding: 0px;&quot;&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to use most Android cameras&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to find the user&#39;s location with GPS data&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to detect movement and orientation of the device&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to program against the accelerometer and compass&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to use the AndAR library in marker recognition&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to create an artificial horizon for your app&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to integrate the Google Maps API into AR apps&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to build enterprise&amp;nbsp;augmented reality&amp;nbsp;apps using the case studies in this book&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 1em; margin: 0px 0px 0.25em;&quot;&gt;Who this book is for&lt;/h3&gt;&lt;div style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;This book is for Android developers familiar with Android programming, but new to the camera, accelerometer, magnetometer and building&amp;nbsp;augmented reality&amp;nbsp;applications in general.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 1em; margin: 0px 0px 0.25em;&quot;&gt;Table of Contents&lt;/h3&gt;&lt;ol style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;&lt;li&gt;Applications&amp;nbsp;of Augmented Reality&lt;/li&gt;&lt;li&gt;Basics of Augmented Reality on the Android Platform&lt;/li&gt;&lt;li&gt;Adding Overlays&lt;/li&gt;&lt;li&gt;Artificial Horizons&lt;/li&gt;&lt;li&gt;Other Features of Augmented Reality&lt;/li&gt;&lt;li&gt;A Simple App Using AR&lt;/li&gt;&lt;li&gt;A More Complex Project Using More AR Features&lt;/li&gt;&lt;li&gt;A Project Using All AR Features&lt;/li&gt;&lt;li&gt;An AR Game&lt;/li&gt;&lt;/ol&gt;&lt;br/&gt;&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/8518347197037866798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/pro-android-augmented-reality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8518347197037866798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8518347197037866798'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/pro-android-augmented-reality.html' title='Pro Android Augmented Reality (Professional Apress)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-3719849885670354666</id><published>2012-08-21T14:42:00.000-07:00</published><updated>2012-08-25T00:52:36.025-07:00</updated><title type='text'>Decompiling Android</title><content type='html'>&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=pointe&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=B008HTPXCQ&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;&lt;em&gt;Decompiling Android&amp;nbsp;&lt;/em&gt;looks at the the reason why Android apps can be decompiled to recover their source code, what it means to Android developers and how you can protect your code from prying eyes. This is also a good way to see how good and bad Android apps are constructed and how to learn from them in building your own apps.&lt;br /&gt;&lt;br /&gt;This is becoming an increasingly important topic as the Android marketplace grows and developers are unwittingly releasing the apps with lots of back doors allowing people to potentially obtain credit card information and&amp;nbsp;database logins to back-end systems, as they don�t realize how easy it is to decompile their Android code. &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;ul style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin: 20px; padding: 0px;&quot;&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;In depth examination of the Java and Android class file structures&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;Tools and techniques for decompiling Android apps&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;Tools and techniques for protecting your Android apps&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 1em; margin: 0px 0px 0.25em;&quot;&gt;What you�ll learn&lt;/h3&gt;&lt;ul style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin: 20px; padding: 0px;&quot;&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to download an Android app and decompile it into its original Java source and HTML5 and CSS code&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to protect your Android apps so that others cannot decompile it&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;To identify potential security&amp;nbsp;threats that currently exist and how to avoid them &amp;nbsp;&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;What tools are available to decompile and protect Android apps&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;The structure of a Java Classfile and an Android classfile&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How the standard JVM and the Dalvik JVM differ&lt;/li&gt;&lt;li style=&quot;margin: 0.5em 0em;&quot;&gt;How to create your own Android decompiler and obfuscator&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 1em; margin: 0px 0px 0.25em;&quot;&gt;Who this book is for&lt;/h3&gt;&lt;div style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;This book is for Android developers and their managers. It&#39;s also for hackers and hobbyist types who wish to see how Android apps are constructed as a means of learning how to build Android apps.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 1em; margin: 0px 0px 0.25em;&quot;&gt;Table of Contents&lt;/h3&gt;&lt;ol style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small;&quot;&gt;&lt;li&gt;Laying the Groundwork&lt;/li&gt;&lt;li&gt;Ghost in the Machine&amp;nbsp;&lt;/li&gt;&lt;li&gt;Inside the DEX File&lt;/li&gt;&lt;li&gt;Tools of the Trade&lt;/li&gt;&lt;li&gt;Decompiler Design&lt;/li&gt;&lt;li&gt;Decompiler Implementation&lt;/li&gt;&lt;li&gt;Case Studies&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/3719849885670354666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/decompiling-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/3719849885670354666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/3719849885670354666'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/decompiling-android.html' title='Decompiling Android'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5226516234802230286</id><published>2012-08-21T13:47:00.000-07:00</published><updated>2012-08-25T00:52:36.057-07:00</updated><title type='text'>Retain fragment instance across Activity re-creation (such as from a configuration change)</title><content type='html'>&lt;b&gt;&lt;a href=&quot;http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)&quot;&gt;Fragment.setRetainInstance (boolean retain)&lt;/a&gt;&lt;/b&gt; control whether a fragment instance is retained across Activity re-creation (such as from a configuration change). This can only be used with fragments not in the back stack. If set, the fragment lifecycle will be slightly different when an activity is recreated:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;onDestroy()&lt;/b&gt; will not be called (but onDetach() still will be, because the fragment is being detached from its current activity).&lt;/li&gt;&lt;li&gt;&lt;b&gt;onCreate(Bundle)&lt;/b&gt; will not be called since the fragment is not being re-created.&lt;/li&gt;&lt;li&gt;&lt;b&gt;onAttach(Activity)&lt;/b&gt; and onActivityCreated(Bundle) will still be called.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrtjgCr8tQHHYJIQzyBDNlj1A3mza7XjEh9p00I_cYPQAePfswVys4D4EB7trWY4XkpcC2t1UehZT9C-hVy7Dx9-fwuclfMaTvGBIB2F9zyv1n_qq5K7SOwWvVwsfJdNChYLL6gckCG1bx/s1600/OrientationChange_03.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Fragment.setRetainInstance (boolean retain)&quot; border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrtjgCr8tQHHYJIQzyBDNlj1A3mza7XjEh9p00I_cYPQAePfswVys4D4EB7trWY4XkpcC2t1UehZT9C-hVy7Dx9-fwuclfMaTvGBIB2F9zyv1n_qq5K7SOwWvVwsfJdNChYLL6gckCG1bx/s400/OrientationChange_03.png&quot; title=&quot;Fragment.setRetainInstance (boolean retain)&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the example, there are two Fragment, MyFragment and MyFragment2. Basically, both Fragments are same, except that MyFragment2 call setRetainInstance(true) in onCreate(). It can be noticed that onCreate() and onDestroy() of MyFragment2 will not be called when orientation change, and the field myState of MyFragment2 will not be cleared.&lt;br /&gt;&lt;br /&gt;Main layout, contain two fragments.&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;   android:orientation=&quot;horizontal&quot; &amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;fragment&lt;br /&gt;       class=&quot;com.example.androidretaininstance.MyFragment&quot;&lt;br /&gt;       android:id=&quot;@+id/myfragment1&quot;&lt;br /&gt;       android:layout_width=&quot;0px&quot;&lt;br /&gt;       android:layout_weight=&quot;1&quot;&lt;br /&gt;       android:layout_height=&quot;match_parent&quot; /&amp;gt;&lt;br /&gt;   &amp;lt;fragment&lt;br /&gt;       class=&quot;com.example.androidretaininstance.MyFragment2&quot;&lt;br /&gt;       android:id=&quot;@+id/myfragment2&quot;&lt;br /&gt;       android:layout_width=&quot;0px&quot;&lt;br /&gt;       android:layout_weight=&quot;1&quot;&lt;br /&gt;       android:layout_height=&quot;match_parent&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;/res/layout/fragmentlayout.xml, the layout of the fragment&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;   android:orientation=&quot;vertical&quot; &amp;gt;&lt;br /&gt;   &amp;lt;TextView&lt;br /&gt;       android:id=&quot;@+id/myid&quot;&lt;br /&gt;       android:layout_width=&quot;match_parent&quot;&lt;br /&gt;       android:layout_height=&quot;wrap_content&quot; /&amp;gt;&lt;br /&gt;   &amp;lt;ScrollView &lt;br /&gt;       android:layout_width=&quot;match_parent&quot;&lt;br /&gt;       android:layout_height=&quot;match_parent&quot;&amp;gt;&lt;br /&gt;       &amp;lt;TextView&lt;br /&gt;           android:id=&quot;@+id/mystatus&quot;&lt;br /&gt;           android:layout_width=&quot;match_parent&quot;&lt;br /&gt;           android:layout_height=&quot;wrap_content&quot; /&amp;gt;&lt;br /&gt;   &amp;lt;/ScrollView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;MyFragment.java&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;package com.example.androidretaininstance;&lt;br /&gt;&lt;br /&gt;import android.app.Fragment;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.LayoutInflater;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.ViewGroup;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MyFragment extends Fragment {&lt;br /&gt; &lt;br /&gt; int myID;&lt;br /&gt; String myState = &quot;&quot;;&lt;br /&gt; &lt;br /&gt; TextView textID;&lt;br /&gt; TextView textStatus;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public View onCreateView(LayoutInflater inflater, ViewGroup container,&lt;br /&gt;   Bundle savedInstanceState) {&lt;br /&gt;  View myFragmentView = inflater.inflate(R.layout.fragmentlayout, container, false);&lt;br /&gt;  textID = (TextView)myFragmentView.findViewById(R.id.myid);&lt;br /&gt;  textStatus = (TextView)myFragmentView.findViewById(R.id.mystatus);&lt;br /&gt;  &lt;br /&gt;  textID.setText(&quot;ID = &quot; + String.valueOf(myID));&lt;br /&gt;  &lt;br /&gt;  updateStatus(myID + &quot;:onCreateView()&quot;);&lt;br /&gt;  return myFragmentView;&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;  myID = getId();&lt;br /&gt;  updateStatus(myID + &quot;:onCreate()&quot;);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void onDestroy() {&lt;br /&gt;  super.onDestroy();&lt;br /&gt;  updateStatus(myID + &quot;:onDestroy()&quot;);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private void updateStatus(String st){&lt;br /&gt;  &lt;br /&gt;  if(textStatus == null){&lt;br /&gt;   myState += st + &quot; (delayed)\n&quot;;&lt;br /&gt;  }else{&lt;br /&gt;   myState += st +&quot;\n&quot;;&lt;br /&gt;   textStatus.setText(myState);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  Toast.makeText(getActivity(), st, Toast.LENGTH_LONG).show();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;MyFragment2.java, extends MyFragment, override onCreate() to call setRetainInstance(true).&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;package com.example.androidretaininstance;&lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class MyFragment2 extends MyFragment {&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;  setRetainInstance(true);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://adf.ly/1677922/sites.google.com/site/androidersite/download/AndroidRetainInstance_120822a.zip?attredirects=0&amp;amp;d=1&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5360544424610981522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFoRBwkjdrzqEnDNyjJlCIuxRUIniP6eI19lZg4OPT8GWnuLtNUpUVCJL1MEe1J4ZSFiokydyfX-X1_ibmOl4GGwquuHOXXBXzZFK-G7nqF5iOduLjl6KTB97N8L1g2ccyEYrMWKvWOXe/s200/icons_download.gif&quot; style=&quot;height: 21px; width: 18px;&quot; /&gt;Download the files&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5226516234802230286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/retain-fragment-instance-across.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5226516234802230286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5226516234802230286'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/retain-fragment-instance-across.html' title='Retain fragment instance across Activity re-creation (such as from a configuration change)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrtjgCr8tQHHYJIQzyBDNlj1A3mza7XjEh9p00I_cYPQAePfswVys4D4EB7trWY4XkpcC2t1UehZT9C-hVy7Dx9-fwuclfMaTvGBIB2F9zyv1n_qq5K7SOwWvVwsfJdNChYLL6gckCG1bx/s72-c/OrientationChange_03.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-3490134891767520364</id><published>2012-08-20T10:49:00.000-07:00</published><updated>2012-08-25T00:52:36.019-07:00</updated><title type='text'>Retrieve old activity state for configuration change by overriding onRetainNonConfigurationInstance() method</title><content type='html'>As mentioned in the post &quot;&lt;a href=&quot;http://android-er.blogspot.com/2011/08/activity-will-be-re-started-when-screen.html&quot; target=&quot;_blank&quot;&gt;Activity will be re-started when screen orientation changed&lt;/a&gt;&quot;, the old activity will be destroyed when orientation changed. And also mentioned in last exercise &quot;&lt;a href=&quot;http://android-er.blogspot.com/2012/08/edittext-keep-no-change-after.html&quot; target=&quot;_blank&quot;&gt;EditText keep no change after orientation changed&lt;/a&gt;&quot;, the states of some views will be kept. But it&#39;s not always true; for example, refer to the exercise in &quot;&lt;a href=&quot;http://android-er.blogspot.com/2012/07/gridview-loading-photos-from-sd-card.html&quot;&gt;GridView&lt;/a&gt;&quot;, the GridView will always reload photos from SD Card when orientation changed.&lt;br /&gt;&lt;br /&gt;To maintain the old states, we can overriding the method onRetainNonConfigurationInstance() to return the old activity. Via the returned activity object, we can retrieve the fields of the old activity.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Please notice that the method onRetainNonConfigurationInstance() is deprecated,  If you are targeting HONEYCOMB or later, consider instead using a Fragment with Fragment.setRetainInstance(boolean).&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJu7uoNrsmZQe0V_YxbECUqVT0Tb_Ea2bwis2H2NLztUEMF_oNfqBIoe0vtA8eiNctzzQ74k2kp2UkIgrtLJgYILbzOfJ0QcLgvdgL338Dqq2dfjhqFXTxFtf6-rjaRUMSwyW7CRxDjacP/s1600/OrientationChange_02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Retrieve old activity state for configuration change by overriding onRetainNonConfigurationInstance() method&quot; border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJu7uoNrsmZQe0V_YxbECUqVT0Tb_Ea2bwis2H2NLztUEMF_oNfqBIoe0vtA8eiNctzzQ74k2kp2UkIgrtLJgYILbzOfJ0QcLgvdgL338Dqq2dfjhqFXTxFtf6-rjaRUMSwyW7CRxDjacP/s400/OrientationChange_02.png&quot; title=&quot;Retrieve old activity state for configuration change by overriding onRetainNonConfigurationInstance() method&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Modify the java code in the exercise &quot;&lt;a href=&quot;http://android-er.blogspot.com/2012/07/gridview-loading-photos-from-sd-card.html&quot; target=&quot;_blank&quot;&gt;GridView loading photos from SD Card&lt;/a&gt;&quot;, override the method onRetainNonConfigurationInstance() to return the activity object, this. In orCreate() method, check if old activity exist by calling getLastNonConfigurationInstance(). If the returned object not null, means old activity exist.&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;br /&gt; @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.activity_main);&lt;br /&gt;        &lt;br /&gt;        GridView gridview = (GridView) findViewById(R.id.gridview);&lt;br /&gt;        &lt;br /&gt;        //Check if old activity exist&lt;br /&gt;        MainActivity oldActivity = (MainActivity)getLastNonConfigurationInstance();&lt;br /&gt;        if(oldActivity == null){&lt;br /&gt;         myImageAdapter = new ImageAdapter(this);&lt;br /&gt;            gridview.setAdapter(myImageAdapter);&lt;br /&gt;            &lt;br /&gt;            String ExternalStorageDirectoryPath = Environment&lt;br /&gt;              .getExternalStorageDirectory()&lt;br /&gt;              .getAbsolutePath();&lt;br /&gt;            &lt;br /&gt;            String targetPath = ExternalStorageDirectoryPath + &quot;/test/&quot;;&lt;br /&gt;            &lt;br /&gt;            Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show();&lt;br /&gt;            File targetDirector = new File(targetPath);&lt;br /&gt;            &lt;br /&gt;            File[] files = targetDirector.listFiles();&lt;br /&gt;            for (File file : files){&lt;br /&gt;             myImageAdapter.add(file.getAbsolutePath());&lt;br /&gt;            } &lt;br /&gt;            &lt;br /&gt;            // Get memory class of this device, exceeding this amount will throw an&lt;br /&gt;            // OutOfMemory exception.&lt;br /&gt;            final int memClass &lt;br /&gt;             = ((ActivityManager)getSystemService(Context.ACTIVITY_SERVICE))&lt;br /&gt;              .getMemoryClass();&lt;br /&gt;            &lt;br /&gt;            // Use 1/8th of the available memory for this memory cache.&lt;br /&gt;            final int cacheSize = 1024 * 1024 * memClass / 8;&lt;br /&gt;            &lt;br /&gt;            mMemoryCache = new LruCache&amp;lt;String, Bitmap&amp;gt;(cacheSize) {&lt;br /&gt;             &lt;br /&gt;             @Override&lt;br /&gt;             protected int sizeOf(String key, Bitmap bitmap) {&lt;br /&gt;              // The cache size will be measured in bytes rather than number of items.&lt;br /&gt;              return bitmap.getByteCount(); &lt;br /&gt;             }&lt;br /&gt;            };&lt;br /&gt;        }else{&lt;br /&gt;         Toast.makeText(getApplicationContext(), &quot;oldActivity exist&quot;, Toast.LENGTH_LONG).show();&lt;br /&gt;         myImageAdapter = oldActivity.myImageAdapter;&lt;br /&gt;         gridview.setAdapter(myImageAdapter);&lt;br /&gt;         &lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt; @Override&lt;br /&gt; public Object onRetainNonConfigurationInstance() {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  return this;&lt;br /&gt; }&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://adf.ly/1677922/sites.google.com/site/androidersite/download/AndroidGridView_120821a.zip?attredirects=0&amp;amp;d=1&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5360544424610981522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFoRBwkjdrzqEnDNyjJlCIuxRUIniP6eI19lZg4OPT8GWnuLtNUpUVCJL1MEe1J4ZSFiokydyfX-X1_ibmOl4GGwquuHOXXBXzZFK-G7nqF5iOduLjl6KTB97N8L1g2ccyEYrMWKvWOXe/s200/icons_download.gif&quot; style=&quot;height: 21px; width: 18px;&quot; /&gt;Download the files&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/3490134891767520364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/retrieve-old-activity-state-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/3490134891767520364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/3490134891767520364'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/retrieve-old-activity-state-for.html' title='Retrieve old activity state for configuration change by overriding onRetainNonConfigurationInstance() method'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJu7uoNrsmZQe0V_YxbECUqVT0Tb_Ea2bwis2H2NLztUEMF_oNfqBIoe0vtA8eiNctzzQ74k2kp2UkIgrtLJgYILbzOfJ0QcLgvdgL338Dqq2dfjhqFXTxFtf6-rjaRUMSwyW7CRxDjacP/s72-c/OrientationChange_02.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5522308496354649262</id><published>2012-08-20T09:01:00.000-07:00</published><updated>2012-08-24T22:53:54.775-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tip"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><category scheme="http://www.blogger.com/atom/ns#" term="xp"/><title type='text'>Make a Symbolic Link on Windows XP</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; src=&quot;http://blueskyworkshop.com/images/blog/win-icons/MediaCenter.png&quot; /&gt;I found out on Friday to make a symbolic link with Windows XP, you need to download a special utility.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx&quot;&gt;Get Junction from Microsoft here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To create a link use the following syntax:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;junction &amp;lt;link&gt; &amp;lt;path&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;for example&lt;br /&gt;&lt;br /&gt;&lt;code&gt;junction c:\progs c:\Program Files&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5522308496354649262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/make-symbolic-link-on-windows-xp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5522308496354649262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5522308496354649262'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/make-symbolic-link-on-windows-xp.html' title='Make a Symbolic Link on Windows XP'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5003787574521946610</id><published>2012-08-19T11:07:00.000-07:00</published><updated>2012-08-25T00:52:36.051-07:00</updated><title type='text'>EditText keep no change after orientation changed</title><content type='html'>As mentioned in the post &quot;&lt;a href=&quot;http://android-er.blogspot.com/2011/08/activity-will-be-re-started-when-screen.html&quot; target=&quot;_blank&quot;&gt;Activity will be re-started when screen orientation changed&lt;/a&gt;&quot;, onCreate() method will be called when orientation changed, to re-layout the screen. But in case of some views, such as EditText, the Android life-cycle mechanism will restore the states.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj24AM-DwzDONKgyyrviGgZ-BByWN4jqX1Nw7vtWXXAUqH17m3_nupyMIFqrvQBwcahDjSn1hc0vxUo6IJE0LE4Kgooy6ynZ_TAcv-0j6DLLGj4GHOZhX365irdVG0Ioi7tnpkfdq6L3qSV/s1600/OrientationChange.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;orientation changed&quot; border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj24AM-DwzDONKgyyrviGgZ-BByWN4jqX1Nw7vtWXXAUqH17m3_nupyMIFqrvQBwcahDjSn1hc0vxUo6IJE0LE4Kgooy6ynZ_TAcv-0j6DLLGj4GHOZhX365irdVG0Ioi7tnpkfdq6L3qSV/s400/OrientationChange.png&quot; title=&quot;orientation changed&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is a example, there are two EditText in the layout. The first one is assigned with a ID, it will update the TextView once text changed. The second one have no ID assigned. You can notice that the text in the first EditText (with ID) will keep no change after orientation changed, and onTextChanged() method of the TextChangedListener will be called also, to update the TextView.&lt;br /&gt;&lt;br /&gt;On the other hand, the second EditText (without ID assigned) will clear to empty when orientation changed.&lt;br /&gt;&lt;br /&gt;Layout&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;    xmlns:tools=&quot;http://schemas.android.com/tools&quot;&lt;br /&gt;    android:layout_width=&quot;match_parent&quot;&lt;br /&gt;    android:layout_height=&quot;match_parent&quot; &lt;br /&gt;    android:orientation=&quot;vertical&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;        android:layout_width=&quot;wrap_content&quot;&lt;br /&gt;        android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;        android:text=&quot;@string/hello_world&quot;&lt;br /&gt;        tools:context=&quot;.MainActivity&quot; /&amp;gt;&lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;        android:id=&quot;@+id/lasttext&quot;&lt;br /&gt;        android:layout_width=&quot;wrap_content&quot;&lt;br /&gt;        android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;        tools:context=&quot;.MainActivity&quot; /&amp;gt;&lt;br /&gt;    &amp;lt;EditText&lt;br /&gt;        android:id=&quot;@+id/intext&quot;&lt;br /&gt;        android:layout_width=&quot;match_parent&quot;&lt;br /&gt;        android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;        tools:context=&quot;.MainActivity&quot; /&amp;gt;&lt;br /&gt;    &amp;lt;EditText&lt;br /&gt;        android:layout_width=&quot;match_parent&quot;&lt;br /&gt;        android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;        tools:context=&quot;.MainActivity&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;package com.example.androidorientationchange;&lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.text.Editable;&lt;br /&gt;import android.text.TextWatcher;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt; TextView lastText;&lt;br /&gt; EditText inText;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.activity_main);&lt;br /&gt;        &lt;br /&gt;        lastText = (TextView)findViewById(R.id.lasttext);&lt;br /&gt;        &lt;br /&gt;     inText = (EditText)findViewById(R.id.intext);&lt;br /&gt;     inText.addTextChangedListener(new TextWatcher(){&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   public void afterTextChanged(Editable s) {&lt;br /&gt;    // TODO Auto-generated method stub&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   public void beforeTextChanged(CharSequence s, int start, int count,&lt;br /&gt;     int after) {&lt;br /&gt;    // TODO Auto-generated method stub&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   public void onTextChanged(CharSequence s, int start, int before,&lt;br /&gt;     int count) {&lt;br /&gt;    // TODO Auto-generated method stub&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    lastText.setText(s);&lt;br /&gt;    &lt;br /&gt;    Toast.makeText(MainActivity.this, &lt;br /&gt;         &quot;onTextChanged: &quot; + s, Toast.LENGTH_SHORT).show();&lt;br /&gt;   }});&lt;br /&gt;     &lt;br /&gt;     Toast.makeText(MainActivity.this, &lt;br /&gt;       &quot;onCreate&quot;, Toast.LENGTH_LONG).show();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next:&lt;br /&gt;- &lt;a href=&quot;http://android-er.blogspot.com/2012/08/retrieve-old-activity-state-for.html&quot;&gt;Retrieve old activity state for configuration change by overriding onRetainNonConfigurationInstance() method&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5003787574521946610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/edittext-keep-no-change-after.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5003787574521946610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5003787574521946610'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/edittext-keep-no-change-after.html' title='EditText keep no change after orientation changed'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj24AM-DwzDONKgyyrviGgZ-BByWN4jqX1Nw7vtWXXAUqH17m3_nupyMIFqrvQBwcahDjSn1hc0vxUo6IJE0LE4Kgooy6ynZ_TAcv-0j6DLLGj4GHOZhX365irdVG0Ioi7tnpkfdq6L3qSV/s72-c/OrientationChange.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-8410153684029209677</id><published>2012-08-17T12:04:00.000-07:00</published><updated>2012-08-24T22:53:54.821-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="mac"/><category scheme="http://www.blogger.com/atom/ns#" term="os x"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Mac and Windows Native App Packaging for Java and JavaFX</title><content type='html'>&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 71px;&quot; src=&quot;http://www.blueskyworkshop.com/images/blog/DukeWaveShadow.gif&quot; alt=&quot;Duke Waving&quot; border=&quot;0&quot; /&gt;With the release of Java 7 u6, native packaging support for Windows and Mac Java FX applications is available to everyone. This is totally awesome and I plan to dive in, but haven&#39;t yet. But don&#39;t wait for me, here are the details so you can get started.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For Mac OS X packaging, here are the details:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html&quot;&gt;Java Mac Packaging Guide&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://java.net/projects/appbundler&quot;&gt;AppBundler Project&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;And for Windows, check out Igor&#39;s original post:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogs.oracle.com/talkingjavadeployment/entry/native_packaging_for_javafx&quot;&gt;Igor&#39;s Packaging Blog Post&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/8410153684029209677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/mac-and-windows-native-app-packaging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8410153684029209677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8410153684029209677'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/mac-and-windows-native-app-packaging.html' title='Mac and Windows Native App Packaging for Java and JavaFX'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-1949185755763271802</id><published>2012-08-16T04:30:00.000-07:00</published><updated>2012-08-25T00:52:35.996-07:00</updated><title type='text'>Android Programming with App Inventor</title><content type='html'>&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3baq9PEwJunJcJwT1VF8Mkv2NJf_xpL5XvDSTxFAei7AVNuCbJkUpAUj9kJheAHMeUC7AvIyIFP3aFkstKi0qpiawQrHDmVJK_r_pLBuZpD-N5cRKb2j2t-OyS8LTgucDtahhz73RCnT/s1600/appinventor.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://www.linuxjournal.com/content/android-programming-app-inventor&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Here&lt;/b&gt;&lt;/a&gt; is a great introduction of the re-released MIT App Inventor.&lt;br /&gt;&lt;br /&gt;Related Link:&lt;br /&gt;- &lt;a href=&quot;http://appinventor.mit.edu/&quot;&gt;MIT App Inventor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/1949185755763271802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/android-programming-with-app-inventor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/1949185755763271802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/1949185755763271802'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/android-programming-with-app-inventor.html' title='Android Programming with App Inventor'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3baq9PEwJunJcJwT1VF8Mkv2NJf_xpL5XvDSTxFAei7AVNuCbJkUpAUj9kJheAHMeUC7AvIyIFP3aFkstKi0qpiawQrHDmVJK_r_pLBuZpD-N5cRKb2j2t-OyS8LTgucDtahhz73RCnT/s72-c/appinventor.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-8218520337851443199</id><published>2012-08-15T06:28:00.000-07:00</published><updated>2012-08-25T00:52:36.119-07:00</updated><title type='text'>Implement slide top-down vertical animation</title><content type='html'>The exercise &quot;&lt;a href=&quot;http://android-er.blogspot.com/2011/09/implement-slide-in-and-slide-out.html&quot;&gt;Implement slide-in and slide-out animation&lt;/a&gt;&quot; implement horizontal animation using build in animation xml android.R.anim.slide_in_left and android.R.anim.slide_out_right. Currently, there are no build-in vertical animation xml supported. To implement vertical animation, create it by ourself.&lt;br/&gt;&lt;br/&gt;&lt;iframe width=&quot;480&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/mte8ZtnMQ8E&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;/res/anim/slidedown_in.xml&lt;br/&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;translate xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;    android:interpolator=&quot;@android:anim/accelerate_interpolator&quot;&lt;br /&gt;    android:fromYDelta=&quot;-50%&quot;&lt;br /&gt;    android:toYDelta=&quot;0.0&quot;&lt;br /&gt;    android:duration=&quot;1000&quot; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;/res/anim/slidedown_out.xml&lt;br/&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;translate xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;    android:interpolator=&quot;@android:anim/accelerate_interpolator&quot;&lt;br /&gt;    android:fromYDelta=&quot;0.0&quot;&lt;br /&gt;    android:toYDelta=&quot;50%&quot;&lt;br /&gt;    android:duration=&quot;1000&quot; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;Layout.&lt;br/&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;   android:orientation=&quot;horizontal&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;   &amp;gt;&lt;br /&gt;&amp;lt;ImageView&lt;br /&gt;   android:id=&quot;@+id/image1&quot;&lt;br /&gt;   android:layout_width=&quot;wrap_content&quot;&lt;br /&gt;   android:layout_height=&quot;match_parent&quot;&lt;br /&gt;   android:src=&quot;@drawable/ic_launcher&quot;&lt;br /&gt;   android:visibility=&quot;invisible&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;ImageView&lt;br /&gt;   android:id=&quot;@+id/image2&quot;&lt;br /&gt;   android:layout_width=&quot;wrap_content&quot;&lt;br /&gt;   android:layout_height=&quot;match_parent&quot;&lt;br /&gt;   android:src=&quot;@drawable/ic_launcher&quot;&lt;br /&gt;   android:visibility=&quot;invisible&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;ImageView&lt;br /&gt;   android:id=&quot;@+id/image3&quot;&lt;br /&gt;   android:layout_width=&quot;wrap_content&quot;&lt;br /&gt;   android:layout_height=&quot;match_parent&quot;&lt;br /&gt;   android:src=&quot;@drawable/ic_launcher&quot;&lt;br /&gt;   android:visibility=&quot;invisible&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;Main code.&lt;br/&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;package com.exercise.androidanimation;&lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.animation.Animation;&lt;br /&gt;import android.view.animation.Animation.AnimationListener;&lt;br /&gt;import android.view.animation.AnimationUtils;&lt;br /&gt;import android.widget.ImageView;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt; ImageView image1, image2, image3;&lt;br /&gt; Animation animationSlideDownIn, animationSlideDownOut;&lt;br /&gt; ImageView curSlidingImage;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.activity_main);&lt;br /&gt;        &lt;br /&gt;        image1 = (ImageView)findViewById(R.id.image1);&lt;br /&gt;        image2 = (ImageView)findViewById(R.id.image2);&lt;br /&gt;        image3 = (ImageView)findViewById(R.id.image3);&lt;br /&gt;        &lt;br /&gt;        animationSlideDownIn = AnimationUtils.loadAnimation(this, R.anim.slidedown_in);&lt;br /&gt;        animationSlideDownOut = AnimationUtils.loadAnimation(this, R.anim.slidedown_out);&lt;br /&gt;        &lt;br /&gt;        animationSlideDownIn.setAnimationListener(animationSlideInListener);&lt;br /&gt;        animationSlideDownOut.setAnimationListener(animationSlideOutListener);&lt;br /&gt;&lt;br /&gt;        curSlidingImage = image1;&lt;br /&gt;        image1.startAnimation(animationSlideDownIn);&lt;br /&gt;        image1.setVisibility(View.VISIBLE);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onPause() {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  super.onPause();&lt;br /&gt;  image1.clearAnimation();&lt;br /&gt;  image2.clearAnimation();&lt;br /&gt;  image3.clearAnimation();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; AnimationListener animationSlideInListener&lt;br /&gt; = new AnimationListener(){&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onAnimationEnd(Animation arg0) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   if(curSlidingImage == image1){&lt;br /&gt;    image1.startAnimation(animationSlideDownOut); &lt;br /&gt;   }else if(curSlidingImage == image2){&lt;br /&gt;    image2.startAnimation(animationSlideDownOut); &lt;br /&gt;   }else if(curSlidingImage == image3){&lt;br /&gt;    image3.startAnimation(animationSlideDownOut); &lt;br /&gt;   } &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onAnimationRepeat(Animation animation) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onAnimationStart(Animation animation) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; };&lt;br /&gt; &lt;br /&gt; AnimationListener animationSlideOutListener&lt;br /&gt; = new AnimationListener(){&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onAnimationEnd(Animation animation) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   if(curSlidingImage == image1){&lt;br /&gt;    curSlidingImage = image2;&lt;br /&gt;    image2.startAnimation(animationSlideDownIn);&lt;br /&gt;    image1.setVisibility(View.INVISIBLE);&lt;br /&gt;    image2.setVisibility(View.VISIBLE);&lt;br /&gt;    image3.setVisibility(View.INVISIBLE); &lt;br /&gt;   }else if(curSlidingImage == image2){&lt;br /&gt;    curSlidingImage = image3;&lt;br /&gt;    image3.startAnimation(animationSlideDownIn);&lt;br /&gt;    image1.setVisibility(View.INVISIBLE);&lt;br /&gt;    image2.setVisibility(View.INVISIBLE);&lt;br /&gt;    image3.setVisibility(View.VISIBLE); &lt;br /&gt;   }else if(curSlidingImage == image3){&lt;br /&gt;    curSlidingImage = image1;&lt;br /&gt;    image1.startAnimation(animationSlideDownIn);&lt;br /&gt;    image1.setVisibility(View.VISIBLE);&lt;br /&gt;    image2.setVisibility(View.INVISIBLE);&lt;br /&gt;    image3.setVisibility(View.INVISIBLE); &lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onAnimationRepeat(Animation animation) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onAnimationStart(Animation animation) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://adf.ly/1677922/sites.google.com/site/androidersite/download/AndroidAnimation_120815a.zip?attredirects=0&amp;d=1&quot;&gt;&lt;img style=&quot;width: 18px; height: 21px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFoRBwkjdrzqEnDNyjJlCIuxRUIniP6eI19lZg4OPT8GWnuLtNUpUVCJL1MEe1J4ZSFiokydyfX-X1_ibmOl4GGwquuHOXXBXzZFK-G7nqF5iOduLjl6KTB97N8L1g2ccyEYrMWKvWOXe/s200/icons_download.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5360544424610981522&quot; border=&quot;0&quot; /&gt;Download the files&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;     </content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/8218520337851443199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/implement-slide-top-down-vertical.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8218520337851443199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8218520337851443199'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/implement-slide-top-down-vertical.html' title='Implement slide top-down vertical animation'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/mte8ZtnMQ8E/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-4911388369874568188</id><published>2012-08-14T14:17:00.000-07:00</published><updated>2012-08-24T22:53:54.747-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="os x"/><title type='text'>Java 7 u6 Released</title><content type='html'>&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 71px;&quot; src=&quot;http://www.blueskyworkshop.com/images/blog/DukeWaveShadow.gif&quot; alt=&quot;Duke Waving&quot; border=&quot;0&quot; /&gt;Java 7 u6 is in the wild. Full Mac OS X support is the big calling card in this release, along with Java FX 2.2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;Java 7 u6&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/4911388369874568188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/java-7-u6-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/4911388369874568188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/4911388369874568188'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/java-7-u6-released.html' title='Java 7 u6 Released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5852091269601818235</id><published>2012-08-13T19:54:00.000-07:00</published><updated>2012-08-24T22:53:54.789-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="ipad"/><category scheme="http://www.blogger.com/atom/ns#" term="table"/><title type='text'>iOS vs Android Home Screens and the Nexus 7</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;200&quot; width=&quot;200&quot; src=&quot;http://blueskyworkshop.com/images/blog/AndroidApps/Market.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Well with all the buzz around the Google Nexus 7 I decided to get one. So one thing that I though was really interesting is how the home screens are laid out. I found this a bit odd coming from the iPhone world.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When you compare the two, they sorta look like this.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img style=&quot;margin-left:1em; margin-right:1em&quot; border=&quot;0&quot; height=&quot;300&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbZAmoSZYnOrFqEYdJ9EEF20_16OIC-LxenDeJe0pmPkL9XnEMm50xSKueHm3uoT84oHz5cKfebWckeiNVW_L5x-4y7APjrFKgUO6_YZA1eZlMz7Cl5T4xaPLbOvMw0kDRLbUrtWt-HEo/s400/TabletHomePages.png&quot; /&gt;&lt;/div&gt;The Apple devices always home to the left most page. So when you press the home button twice you end up on the left.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How Android is Different&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;With the Android device, the home page is always in the center. You can navigate two pages to the left or right. But pressing the home button twice always takes you to the center page. Once I figured this out, it made sense.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;However, the thing that really threw me off at first was the Android widgets. With iOS, the only thing that shows up on a page are icons or folders. No deviations from that. With Android, you can put Widgets on a page. Widgets are little mini apps that can take anywhere from a row of space to the entire page. The home page on the Nexus 7 is filled with a Google Play widget. It took me quite a bit of playing around to figure this out.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I think Google would be better off to make the widget maybe half a page or smaller. That way, the new apps are installed on the home page and users can see as they are added. Without that sort of behavior it is less than obvious where new app icons get added. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;First Impressions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The size and weight of the Nexus 7 are pretty cool. It is a great device for reading books. Although, I do think Google would be better off with their own ePub reader. Finding and installing one took much more work than it should have. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I&#39;ll add more as I spend more time with it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5852091269601818235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/ios-vs-android-home-screens-and-nexus-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5852091269601818235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5852091269601818235'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/ios-vs-android-home-screens-and-nexus-7.html' title='iOS vs Android Home Screens and the Nexus 7'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbZAmoSZYnOrFqEYdJ9EEF20_16OIC-LxenDeJe0pmPkL9XnEMm50xSKueHm3uoT84oHz5cKfebWckeiNVW_L5x-4y7APjrFKgUO6_YZA1eZlMz7Cl5T4xaPLbOvMw0kDRLbUrtWt-HEo/s72-c/TabletHomePages.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-381627922142047945</id><published>2012-08-13T09:49:00.000-07:00</published><updated>2012-08-24T22:53:54.739-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="example"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Java Logger Example</title><content type='html'>&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 71px;&quot; src=&quot;http://www.blueskyworkshop.com/images/blog/DukeWaveShadow.gif&quot; alt=&quot;Duke Waving&quot; border=&quot;0&quot; /&gt;If you are interested in creating a simple single instance logger for an application, here is &lt;a href=&quot;http://localhost/topics/Java-Pages/java-logger/&quot;&gt;a simple logging example&lt;/a&gt; I created a few weeks back. The page includes a brief description and the code is commented. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I hope to be posting a lot more examples in the weeks to come. Often when writing about stuff, one does not get enough practice actually doing. So I am making a concerted effort to spend a lot more time practicing.</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/381627922142047945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/java-logger-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/381627922142047945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/381627922142047945'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/java-logger-example.html' title='Java Logger Example'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-4993067878228135985</id><published>2012-08-13T09:43:00.000-07:00</published><updated>2012-08-24T22:53:54.755-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apple"/><category scheme="http://www.blogger.com/atom/ns#" term="os x"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Screenium Screen Recorder</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://itunes.apple.com/us/app/screenium/id402477606?mt=12&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;175&quot; width=&quot;175&quot; src=&quot;http://a3.mzstatic.com/us/r1000/108/Purple/v4/d7/45/e6/d745e60f-bd87-323f-8feb-0b0e5b82c4c7/AppIcon.175x175-75.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;This weekend I was trying to figure out how to make a copy of a streamed Flash movie. There is stream recording software out there. However, the easy to use stuff is not free, nor does it work that well. But sometimes, the simplest solution is the best.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I ended up buying &lt;a href=&quot;http://itunes.apple.com/us/app/screenium/id402477606?mt=12&quot;&gt;Screenium&lt;/a&gt; which is an inexpensive screen recording tool for the Mac. And it did an excellent job of making a copy of the video. Of course it is not perfect as I had to capture the audio and video. But for my purposes, making a copy of an interview for future reference, it worked great. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also, Screenium is on sale this week for 50% off. So if you want a copy I think you need to buy it today at the latest.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/4993067878228135985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/screenium-screen-recorder.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/4993067878228135985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/4993067878228135985'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/screenium-screen-recorder.html' title='Screenium Screen Recorder'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-6554718861978743137</id><published>2012-08-13T08:45:00.000-07:00</published><updated>2012-08-25T00:52:36.085-07:00</updated><title type='text'>Preview build of ADT 21 and of the SDK Tools, r21 released</title><content type='html'>&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid6P9SNI-aSxNxpFzoxqazuoHVIaj2WEVAzhW12FxV2EaHjrK7d5NHEEEKMMzY6hUGcKqv9EUIcJZUtSVgovjZSiElO9KCSGsp6b1UieasG474KVP8jSul5gAC2issFHmLgjMtxnkxSbdi/s1600/adt.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;Preview 1 is mostly a bugfix release. It contains a number of bug fixes in various areas that were new in ADT 20, such as the new template infrastructure. Whereas 20.0.1, 20.0.2 and the upcoming 20.0.3 contained a small number of absolutely critical fixes, ADT 21 contains a much larger number of general bug fixes and infrastructure improvements.&lt;br /&gt;&lt;br /&gt;Details: &lt;a href=&quot;http://tools.android.com/download/adt-21-preview&quot; target=&quot;_blank&quot;&gt;http://tools.android.com/download/adt-21-preview&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/6554718861978743137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/preview-build-of-adt-21-and-of-sdk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/6554718861978743137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/6554718861978743137'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/preview-build-of-adt-21-and-of-sdk.html' title='Preview build of ADT 21 and of the SDK Tools, r21 released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid6P9SNI-aSxNxpFzoxqazuoHVIaj2WEVAzhW12FxV2EaHjrK7d5NHEEEKMMzY6hUGcKqv9EUIcJZUtSVgovjZSiElO9KCSGsp6b1UieasG474KVP8jSul5gAC2issFHmLgjMtxnkxSbdi/s72-c/adt.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-4914829801761065532</id><published>2012-08-10T19:57:00.000-07:00</published><updated>2012-08-24T22:53:54.750-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>The Right way to Redirect a Page</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; src=&quot;http://blueskyworkshop.com/images/blog/256-Bus-Icons/Globe Internet.png&quot; /&gt;Well it seems like every time I do something new with my website, there is always something to learn. I&#39;m in the process of rewriting the CMS I use for the how to&#39;s and examples on &lt;a href=&quot;http://blueskyworkshop.com/topics/&quot;&gt;http://blueskyworkshop.com/topics/&lt;/a&gt;. I know I needed to use an HTTP header to forward pages. But after some additional reading, I learned what I was doing was not enough.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To tell a search engine like Google a page has moved, you have to send it a 301 Moved Permanently header. Then, the next time Google&#39;s spider reads the site, it will move the statistics associated with the page from the old location to the new one. This is done in PHP as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;// Permanent redirection&lt;br /&gt;header(&quot;HTTP/1.1 301 Moved Permanently&quot;);&lt;br /&gt;header(&quot;Location: http://www.somacon.com/&quot;);&lt;br /&gt;exit();&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;Get &lt;a href=&quot;http://www.somacon.com/p145.php&quot;&gt;the details from Somacon here&lt;/a&gt;. The post includes a number of examples for several different languages.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I should be able to confirm the older pages are no longer being referenced using Google Analytics. Anyway, I guess we will see in a few weeks.</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/4914829801761065532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/the-right-way-to-redirect-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/4914829801761065532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/4914829801761065532'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/the-right-way-to-redirect-page.html' title='The Right way to Redirect a Page'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5613146914212272371</id><published>2012-08-10T15:40:00.000-07:00</published><updated>2012-08-24T22:53:54.778-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Google IO 2012 Sessions on the Net</title><content type='html'>&lt;img border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; src=&quot;http://blueskyworkshop.com/images/blog/gplus-icon.png&quot; /&gt;This is totally awesome! &lt;a href=&quot;https://developers.google.com/events/io/sessions&quot;&gt;Google has made all the Google IO 2012 sessions&lt;/a&gt; available on the Net. So if you were like me who would have loved to go and get those goodies, but couldn&#39;t, at least you can listen to the sessions. </content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5613146914212272371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/google-io-2012-sessions-on-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5613146914212272371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5613146914212272371'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/google-io-2012-sessions-on-net.html' title='Google IO 2012 Sessions on the Net'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-2039594299665295694</id><published>2012-08-08T13:38:00.000-07:00</published><updated>2012-08-24T22:53:54.719-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Wired Writer gets Hacked Hard</title><content type='html'>&lt;img style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot; border=&quot;0&quot; height=&quot;128&quot; width=&quot;128&quot; src=&quot;http://blueskyworkshop.com/images/blog/256-Bus-Icons/Burn.png&quot; /&gt;If you haven&#39;t heard about this story, it worth a look. A &lt;a href=&quot;http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/&quot;&gt;Wired writer was hacked on Friday&lt;/a&gt;. His MacBook, iPhone, Twitter account, and GMail all taken over. The interesting part is that most of the hacks used social engineering to get enough information about his accounts to take them over. No password cracker or anything like that.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/2039594299665295694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/wired-writer-gets-hacked-hard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/2039594299665295694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/2039594299665295694'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/wired-writer-gets-hacked-hard.html' title='Wired Writer gets Hacked Hard'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-8961608422536692425</id><published>2012-08-06T20:47:00.000-07:00</published><updated>2012-08-24T22:53:54.839-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="safari"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><category scheme="http://www.blogger.com/atom/ns#" term="webkit"/><title type='text'>Apple Dropping Safari for Windows</title><content type='html'>&lt;img style=&quot;float: left; margin-bottom: 4px; margin-right: 4px;&quot; border=&quot;0&quot; height=&quot;97&quot; src=&quot;http://blueskyworkshop.com/images/blog/webkiticon.png&quot; width=&quot;120&quot; alt=&quot;Webkit icon&quot; /&gt;It looks like Apple is discontinuing support for Safari on Windows. With the release of Mountain Lion last week, Safari was updated to version 6. However, there is no Windows version 6 of Safari. When you go to the &lt;a href=&quot;http://www.apple.com/safari/&quot;&gt;Apple website for Safari&lt;/a&gt; there&#39;s no download option if you&#39;re using Windows. However, if you Google for Safari 5.1.7 you will see that there is a link to a support site that has the download. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are a couple stories detailing the change. &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.sitepoint.com/safari-6-whats-new-windows-version/&quot;&gt;SitePoint: Dropping Windows Safari is a Mistake&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.macworld.com/article/1167904/safari_6_available_for_mountain_lion_and_lion_but_not_windows.html&quot;&gt;MacWorld: Safari 6 Not for Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have to agree with the SitePoint Writer, getting rid of Safari on Windows seems like a bad idea. Although it is not that popular it is very useful as a development tool. Maybe Apple should consider open sourcing the Windows version?  It is important for there to be another WebKit browser on Windows other than Chrome.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/8961608422536692425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/apple-dropping-safari-for-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8961608422536692425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8961608422536692425'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/apple-dropping-safari-for-windows.html' title='Apple Dropping Safari for Windows'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-8596681169793045112</id><published>2012-08-06T09:24:00.000-07:00</published><updated>2012-08-24T22:53:54.825-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gaming"/><category scheme="http://www.blogger.com/atom/ns#" term="misc"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Valve Running a Business like a Market</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: left; float: left; margin-bottom: 4px; margin-right: 4px; text-align: left;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;97&quot; src=&quot;http://blueskyworkshop.com/images/blog/webkiticon.png&quot; width=&quot;120&quot; alt=&quot;Webkit icon&quot; /&gt;&lt;/div&gt;At the end of last week, I saw &lt;a href=&quot;http://blogs.valvesoftware.com/economics/why-valve-or-what-do-we-need-corporations-for-and-how-does-valves-management-structure-fit-into-todays-corporate-world/&quot;&gt;this longish story on the Valve blog discussing how valve manages their company like a market&lt;/a&gt;. To sum up, &lt;a href=&quot;http://valvesoftware.com/&quot;&gt;Valve the company&lt;/a&gt; has no management structure. Employees are given a desk with wheels and are told to go find projects they are interested in and start pitching in. Projects and teams are self organizing. Employees are free to work on whatever they want. Sounds cool. However, I have my doubts. Could you apply the same principles to Tech Support? Janitorial services?  I wonder.... What do you think?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/8596681169793045112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/valve-running-business-like-market.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8596681169793045112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/8596681169793045112'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/valve-running-business-like-market.html' title='Valve Running a Business like a Market'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5358644623011245157</id><published>2012-08-05T22:55:00.000-07:00</published><updated>2012-08-25T00:52:36.064-07:00</updated><title type='text'>Share with photo using ShareActionProvider</title><content type='html'>Last exercise demonstrate how to &quot;&lt;a href=&quot;http://android-er.blogspot.com/2012/08/send-email-with-image-by-starting.html&quot; target=&quot;_blank&quot;&gt;send email with photo by starting activity with Intent of ACTION_SEND&lt;/a&gt;&quot;. In this exercise, we will do the same thing using ShareActionProvider.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/ShareActionProvider.html&quot;&gt;ShareActionProvider&lt;/a&gt; was introduced since API Level 14&lt;/b&gt;. This is a provider for a share action. It is responsible for creating views that enable data sharing and also to show a sub menu with sharing activities if the hosting item is placed on the overflow menu.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCnWgZ4joaVRET0fm1E1TQ8FGMwj6_ihmWhQujdmvqHPqsDesZsJMUmogYDq7xaLFLi6PnggfaTSlDYoBc6OmbSLQl7t_cohi9a4DcE_Vp1AqIDCc8b2OwiqKs_e2ZaLj1gFs38GVx25fw/s1600/AndroidSharePhoto.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Share with photo using ShareActionProvider&quot; border=&quot;0&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCnWgZ4joaVRET0fm1E1TQ8FGMwj6_ihmWhQujdmvqHPqsDesZsJMUmogYDq7xaLFLi6PnggfaTSlDYoBc6OmbSLQl7t_cohi9a4DcE_Vp1AqIDCc8b2OwiqKs_e2ZaLj1gFs38GVx25fw/s400/AndroidSharePhoto.png&quot; title=&quot;Share with photo using ShareActionProvider&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Modify /res/menu/activity_main.xml to define the android:actionProviderClass attribute for the corresponding &lt;item&gt; in your menu resource file.&lt;br /&gt;&lt;/item&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;menu xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;&lt;br /&gt;    &amp;lt;item android:id=&quot;@+id/menu_item_share&quot;&lt;br /&gt;        android:showAsAction=&quot;ifRoom&quot;&lt;br /&gt;        android:title=&quot;Share&quot;&lt;br /&gt;        android:actionProviderClass=&quot;android.widget.ShareActionProvider&quot; /&amp;gt;&lt;br /&gt;&amp;lt;/menu&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In order for ShareActionProvider to function, you must provide it a share intent. Find the corresponding MenuItem while inflating your menu resource in your Activity or Fragment. Next, call MenuItem.getActionProvider() to retreive an instance of ShareActionProvider. Use setShareIntent() to update the share intent associated with that action item. ~ refer to onCreateOptionsMenu(Menu menu) in the code.&lt;br /&gt;&lt;br /&gt;When you need to update the content to be shared (ex. EditText changed, photo attached), call setShareIntent(shareIntent) again to update the intent. ~ refer setShareIntent(Intent shareIntent) in the code. &lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;package com.example.androidsharephoto;&lt;br /&gt;&lt;br /&gt;import android.net.Uri;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.text.Editable;&lt;br /&gt;import android.text.TextWatcher;&lt;br /&gt;import android.view.Menu;&lt;br /&gt;import android.view.MenuItem;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.ShareActionProvider;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt; private ShareActionProvider myShareActionProvider;&lt;br /&gt; &lt;br /&gt; EditText edittextEmailAddress;&lt;br /&gt;    EditText edittextEmailSubject;&lt;br /&gt;    EditText edittextEmailText;&lt;br /&gt;    TextView textImagePath;&lt;br /&gt;    Button buttonSelectImage;&lt;br /&gt;    &lt;br /&gt;    final int RQS_LOADIMAGE = 0;&lt;br /&gt;    &lt;br /&gt;    Uri imageUri = null;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.activity_main);&lt;br /&gt;        &lt;br /&gt;        edittextEmailAddress = (EditText)findViewById(R.id.email_address);&lt;br /&gt;        edittextEmailSubject = (EditText)findViewById(R.id.email_subject);&lt;br /&gt;        edittextEmailText = (EditText)findViewById(R.id.email_text);&lt;br /&gt;        edittextEmailAddress.addTextChangedListener(commonTextWatcher);&lt;br /&gt;        edittextEmailSubject.addTextChangedListener(commonTextWatcher);&lt;br /&gt;        edittextEmailText.addTextChangedListener(commonTextWatcher);&lt;br /&gt;        &lt;br /&gt;        textImagePath = (TextView)findViewById(R.id.imagepath);&lt;br /&gt;        &lt;br /&gt;        buttonSelectImage = (Button)findViewById(R.id.selectimage);&lt;br /&gt;        buttonSelectImage.setOnClickListener(buttonSelectImageOnClickListener);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    TextWatcher commonTextWatcher&lt;br /&gt;    = new TextWatcher(){&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void afterTextChanged(Editable s) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   setShareIntent(createShareIntent());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void beforeTextChanged(CharSequence s, int start, int count,&lt;br /&gt;    int after) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onTextChanged(CharSequence s, int start, int before,&lt;br /&gt;    int count) {&lt;br /&gt;   // TODO Auto-generated method stub&lt;br /&gt;   &lt;br /&gt;  }};&lt;br /&gt;    &lt;br /&gt;    OnClickListener buttonSelectImageOnClickListener&lt;br /&gt;    = new OnClickListener(){&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onClick(View arg0) {&lt;br /&gt;   Intent intent = new Intent(Intent.ACTION_PICK,&lt;br /&gt;     android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);&lt;br /&gt;   startActivityForResult(intent, RQS_LOADIMAGE);&lt;br /&gt;  }};&lt;br /&gt;  &lt;br /&gt; @Override&lt;br /&gt; protected void onActivityResult(int requestCode, int resultCode, Intent data) {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  super.onActivityResult(requestCode, resultCode, data);&lt;br /&gt;   &lt;br /&gt;  if (resultCode == RESULT_OK){&lt;br /&gt;   switch(requestCode){&lt;br /&gt;   case RQS_LOADIMAGE:&lt;br /&gt;    imageUri = data.getData();&lt;br /&gt;    textImagePath.setText(imageUri.toString());&lt;br /&gt;    setShareIntent(createShareIntent());&lt;br /&gt;    break; &lt;br /&gt;   }  &lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;        getMenuInflater().inflate(R.menu.activity_main, menu);&lt;br /&gt;        &lt;br /&gt;        MenuItem item = menu.findItem(R.id.menu_item_share);&lt;br /&gt;        myShareActionProvider = (ShareActionProvider)item.getActionProvider();&lt;br /&gt;        myShareActionProvider.setShareHistoryFileName(&lt;br /&gt;          ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);&lt;br /&gt;        myShareActionProvider.setShareIntent(createShareIntent());&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;br /&gt; private Intent createShareIntent() {&lt;br /&gt;     String emailAddress = edittextEmailAddress.getText().toString();&lt;br /&gt;  String emailSubject = edittextEmailSubject.getText().toString();&lt;br /&gt;  String emailText = edittextEmailText.getText().toString();&lt;br /&gt;  String emailAddressList[] = {emailAddress};&lt;br /&gt;  &lt;br /&gt;  Intent shareIntent = new Intent(Intent.ACTION_SEND); &lt;br /&gt;  &lt;br /&gt;  shareIntent.putExtra(Intent.EXTRA_EMAIL, emailAddressList);  &lt;br /&gt;  shareIntent.putExtra(Intent.EXTRA_SUBJECT, emailSubject); &lt;br /&gt;  shareIntent.putExtra(Intent.EXTRA_TEXT, emailText); &lt;br /&gt;  &lt;br /&gt;  if(imageUri != null){&lt;br /&gt;   shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);&lt;br /&gt;   shareIntent.setType(&quot;image/png&quot;);&lt;br /&gt;  }else{&lt;br /&gt;   shareIntent.setType(&quot;plain/text&quot;);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;     return shareIntent; &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt; private void setShareIntent(Intent shareIntent) {&lt;br /&gt;  if (myShareActionProvider != null) {&lt;br /&gt;   myShareActionProvider.setShareIntent(shareIntent); &lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Layout file:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;   android:orientation=&quot;vertical&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;   &amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;@string/hello_world&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;Enter email address:&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;   android:id=&quot;@+id/email_address&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:inputType=&quot;textEmailAddress&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;Enter email Subject:&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;   android:id=&quot;@+id/email_subject&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:inputType=&quot;textEmailSubject&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;Enter Text:&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;   android:id=&quot;@+id/email_text&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView&lt;br /&gt;    android:id=&quot;@+id/imagepath&quot;&lt;br /&gt;    android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;    android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&amp;lt;Button&lt;br /&gt;    android:id=&quot;@+id/selectimage&quot;&lt;br /&gt;    android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;    android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;    android:text=&quot;Select image&quot;&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://adf.ly/1677922/sites.google.com/site/androidersite/download/AndroidSharePhoto_120806a.zip?attredirects=0&amp;amp;d=1&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5360544424610981522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFoRBwkjdrzqEnDNyjJlCIuxRUIniP6eI19lZg4OPT8GWnuLtNUpUVCJL1MEe1J4ZSFiokydyfX-X1_ibmOl4GGwquuHOXXBXzZFK-G7nqF5iOduLjl6KTB97N8L1g2ccyEYrMWKvWOXe/s200/icons_download.gif&quot; style=&quot;height: 21px; width: 18px;&quot; /&gt;Download the files&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5358644623011245157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/share-with-photo-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5358644623011245157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5358644623011245157'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/share-with-photo-using.html' title='Share with photo using ShareActionProvider'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCnWgZ4joaVRET0fm1E1TQ8FGMwj6_ihmWhQujdmvqHPqsDesZsJMUmogYDq7xaLFLi6PnggfaTSlDYoBc6OmbSLQl7t_cohi9a4DcE_Vp1AqIDCc8b2OwiqKs_e2ZaLj1gFs38GVx25fw/s72-c/AndroidSharePhoto.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-694908980388122055.post-5228146216087374475</id><published>2012-08-04T05:20:00.000-07:00</published><updated>2012-08-25T00:52:36.061-07:00</updated><title type='text'>Send email with Image by starting activity using Intent of ACTION_SEND</title><content type='html'>In the previous posts &quot;&lt;a href=&quot;http://android-er.blogspot.com/2011/03/send-email-using-intentactionsend.html&quot; target=&quot;_blank&quot;&gt;Send email using Intent.ACTION_SEND&lt;/a&gt;&quot; and &quot;&lt;a href=&quot;http://android-er.blogspot.com/2011/02/select-image-using-android-build-in.html&quot; target=&quot;_blank&quot;&gt;Select Image using Android build-in Gallery&lt;/a&gt;&quot; demonstrate how to send text email and load image by starting activity using Intent. In this exercise, both function are work together to send email with photos attached.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUmZ2zKuIHL_-i4540ofHNsUXyVhsYByxMKBmK05pE8Ic-tvQb5qeQr9-9Ey5jdN3ox-l0HW7zuJT4V5IU_plMbJb9J-lIGSZbyvgutB9iFWB5K6ijayqo12PoWHt1cuLBVAepATfhQJf/s1600/AndroidEMail_01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Send email with Image by starting activity using Intent of ACTION_SEND&quot; border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUmZ2zKuIHL_-i4540ofHNsUXyVhsYByxMKBmK05pE8Ic-tvQb5qeQr9-9Ey5jdN3ox-l0HW7zuJT4V5IU_plMbJb9J-lIGSZbyvgutB9iFWB5K6ijayqo12PoWHt1cuLBVAepATfhQJf/s400/AndroidEMail_01.png&quot; title=&quot;Send email with Image by starting activity using Intent of ACTION_SEND&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To attach image in email intent, call putExtra() to attach the image uri, and call setType() to set type of &quot;image/png&quot;.&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;package com.exercise.AndroidEMail;&lt;br /&gt;&lt;br /&gt;import android.net.Uri;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt; EditText edittextEmailAddress;&lt;br /&gt;    EditText edittextEmailSubject;&lt;br /&gt;    EditText edittextEmailText;&lt;br /&gt;    TextView textImagePath;&lt;br /&gt;    Button buttonSelectImage;&lt;br /&gt;    Button buttonSendEmail_intent;&lt;br /&gt;    &lt;br /&gt;    final int RQS_LOADIMAGE = 0;&lt;br /&gt;    final int RQS_SENDEMAIL = 1;&lt;br /&gt;    &lt;br /&gt;    Uri imageUri = null;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.activity_main);&lt;br /&gt;        &lt;br /&gt;        edittextEmailAddress = (EditText)findViewById(R.id.email_address);&lt;br /&gt;        edittextEmailSubject = (EditText)findViewById(R.id.email_subject);&lt;br /&gt;        edittextEmailText = (EditText)findViewById(R.id.email_text);&lt;br /&gt;        textImagePath = (TextView)findViewById(R.id.imagepath);&lt;br /&gt;        buttonSelectImage = (Button)findViewById(R.id.selectimage);&lt;br /&gt;        buttonSendEmail_intent = (Button)findViewById(R.id.sendemail_intent);&lt;br /&gt;        &lt;br /&gt;        buttonSelectImage.setOnClickListener(buttonSelectImageOnClickListener);&lt;br /&gt;        buttonSendEmail_intent.setOnClickListener(buttonSendEmail_intentOnClickListener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    OnClickListener buttonSelectImageOnClickListener&lt;br /&gt;    = new OnClickListener(){&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onClick(View arg0) {&lt;br /&gt;   Intent intent = new Intent(Intent.ACTION_PICK,&lt;br /&gt;     android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);&lt;br /&gt;   startActivityForResult(intent, RQS_LOADIMAGE);&lt;br /&gt;  }};&lt;br /&gt;  &lt;br /&gt; OnClickListener buttonSendEmail_intentOnClickListener&lt;br /&gt; = new OnClickListener(){&lt;br /&gt;  &lt;br /&gt;  @Override&lt;br /&gt;  public void onClick(View arg0) {&lt;br /&gt;   String emailAddress = edittextEmailAddress.getText().toString();&lt;br /&gt;   String emailSubject = edittextEmailSubject.getText().toString();&lt;br /&gt;   String emailText = edittextEmailText.getText().toString();&lt;br /&gt;   String emailAddressList[] = {emailAddress};&lt;br /&gt;   &lt;br /&gt;   Intent intent = new Intent(Intent.ACTION_SEND); &lt;br /&gt;   &lt;br /&gt;   intent.putExtra(Intent.EXTRA_EMAIL, emailAddressList);  &lt;br /&gt;   intent.putExtra(Intent.EXTRA_SUBJECT, emailSubject); &lt;br /&gt;   intent.putExtra(Intent.EXTRA_TEXT, emailText); &lt;br /&gt;   &lt;br /&gt;   if(imageUri != null){&lt;br /&gt;    intent.putExtra(Intent.EXTRA_STREAM, imageUri);&lt;br /&gt;    intent.setType(&quot;image/png&quot;);&lt;br /&gt;   }else{&lt;br /&gt;    intent.setType(&quot;plain/text&quot;);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   startActivity(Intent.createChooser(intent, &quot;Choice App to send email:&quot;));&lt;br /&gt;    &lt;br /&gt;  }};&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onActivityResult(int requestCode, int resultCode, Intent data) {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  super.onActivityResult(requestCode, resultCode, data);&lt;br /&gt;  &lt;br /&gt;  if (resultCode == RESULT_OK){&lt;br /&gt;   switch(requestCode){&lt;br /&gt;   case RQS_LOADIMAGE:&lt;br /&gt;    imageUri = data.getData();&lt;br /&gt;    textImagePath.setText(imageUri.toString());&lt;br /&gt;    break;&lt;br /&gt;   case RQS_SENDEMAIL:&lt;br /&gt;    &lt;br /&gt;    break;&lt;br /&gt;   }&lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid black;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;   android:orientation=&quot;vertical&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;   &amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;@string/hello_world&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;Enter email address:&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;   android:id=&quot;@+id/email_address&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:inputType=&quot;textEmailAddress&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;Enter email Subject:&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;   android:id=&quot;@+id/email_subject&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:inputType=&quot;textEmailSubject&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot;Enter Text:&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;   android:id=&quot;@+id/email_text&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;TextView&lt;br /&gt;    android:id=&quot;@+id/imagepath&quot;&lt;br /&gt;    android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;    android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&amp;lt;Button&lt;br /&gt;    android:id=&quot;@+id/selectimage&quot;&lt;br /&gt;    android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;    android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;    android:text=&quot;Select image&quot;&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;   android:id=&quot;@+id/sendemail_intent&quot;&lt;br /&gt;   android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;   android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;   android:text=&quot; Send email using Intent.ACTION_SEND &quot;&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://adf.ly/1677922/sites.google.com/site/androidersite/download/AndroidEMail_120804a.zip?attredirects=0&amp;amp;d=1&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5360544424610981522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheFoRBwkjdrzqEnDNyjJlCIuxRUIniP6eI19lZg4OPT8GWnuLtNUpUVCJL1MEe1J4ZSFiokydyfX-X1_ibmOl4GGwquuHOXXBXzZFK-G7nqF5iOduLjl6KTB97N8L1g2ccyEYrMWKvWOXe/s200/icons_download.gif&quot; style=&quot;height: 21px; width: 18px;&quot; /&gt;Download the files&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Related:&lt;br/&gt;- &lt;a href=&quot;http://android-er.blogspot.com/2012/08/share-with-photo-using.html&quot;&gt;Share with photo using ShareActionProvider&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://updatearea.blogspot.com/feeds/5228146216087374475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://updatearea.blogspot.com/2012/08/send-email-with-image-by-starting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5228146216087374475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/694908980388122055/posts/default/5228146216087374475'/><link rel='alternate' type='text/html' href='http://updatearea.blogspot.com/2012/08/send-email-with-image-by-starting.html' title='Send email with Image by starting activity using Intent of ACTION_SEND'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00502898006554178113</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUmZ2zKuIHL_-i4540ofHNsUXyVhsYByxMKBmK05pE8Ic-tvQb5qeQr9-9Ey5jdN3ox-l0HW7zuJT4V5IU_plMbJb9J-lIGSZbyvgutB9iFWB5K6ijayqo12PoWHt1cuLBVAepATfhQJf/s72-c/AndroidEMail_01.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>