<?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: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-5825086013565955427</id><updated>2012-02-09T07:26:22.957-08:00</updated><category term='pc'/><category term='top ten browsers'/><category term='synergy'/><category term='android project'/><category term='j2se'/><category term='add'/><category term='gingerbread'/><category term='secure'/><category term='flight'/><category term='oops'/><category term='confugure'/><category term='device administration application example'/><category term='magic verison problem'/><category term='ways'/><category term='4.0'/><category term='hidden applications'/><category term='lbs'/><category term='android boot process'/><category term='new features'/><category term='android maps location manager'/><category term='android webview'/><category term='wtc'/><category term='applications'/><category term='api changes'/><category term='Code Pollution: Boot-Time Services'/><category term='sensors'/><category term='sdk'/><category term='android project look up'/><category term='browser'/><category term='is java oop language'/><category term='android layout main'/><category term='bootsequesnce'/><category term='hide'/><category term='top'/><category term='windows'/><category term='xp shortcuts'/><category term='BadTokenException'/><category term='xp'/><category term='usability'/><category term='object oriented programming language'/><category term='light sensor'/><category term='basics'/><category term='lvl'/><category term='android package amnaually'/><category term='linux'/><category term='enterprise features in android'/><category term='shell sqlite android'/><category term='apk'/><category term='crash'/><category term='running applications'/><category term='android Phones Reqlising'/><category term='gingerbread.new features'/><category term='zoom android'/><category term='host'/><category term='java'/><category term='wifi'/><category term='connect'/><category term='steps'/><category term='android.location'/><category term='convert string to hex'/><category term='name'/><category term='diff'/><category term='Android – Displaying Dialogs From Background Threads'/><category term='danger'/><category term='resolveinfo'/><category term='android device administration'/><category term='time'/><category term='taskbar'/><category term='gps'/><category term='hard drives'/><category term='sdcard'/><category term='android tablet'/><category term='ui'/><category term='bluetooth'/><category term='android Soundpoolmanager'/><category term='android'/><category term='monkey'/><category term='adb commands'/><category term='activityManager'/><category term='kernel'/><category term='market'/><category term='history'/><category term='structure'/><category term='shutdown'/><category term='new apis explanation'/><category term='windows xp secrect codes'/><category term='android commands'/><category term='2.3'/><category term='emulator internet'/><category term='performanace'/><category term='secret codes'/><category term='voice actions support'/><category term='google'/><category term='android zygot'/><title type='text'>Android</title><subtitle type='html'>Sharing Knowledge in Mobile Platforms like Android etc.,</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8612703324496721865</id><published>2012-01-02T21:06:00.000-08:00</published><updated>2012-01-02T21:09:24.177-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magic verison problem'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>Disable Linux  Kernel Version Magic problem while loading the module</title><content type='html'>Linux kernel will refuse to load kernel module, if the linux version magic is not match. &lt;br /&gt;&lt;br /&gt;goto kernel/module.c file in kernel folder.&lt;br /&gt;&lt;br /&gt;check for 'check_modinfo' function .&lt;br /&gt;&lt;br /&gt;comment return -ENOEXEC this line in below function for same_magic() check.&lt;br /&gt;&lt;br /&gt;static int check_modinfo(struct module *mod, struct load_info *info)&lt;br /&gt;{&lt;br /&gt;        const char *modmagic = get_modinfo(info, "vermagic");&lt;br /&gt;        int err;&lt;br /&gt;&lt;br /&gt;        /* This is allowed: modprobe --force will invalidate it. */&lt;br /&gt;        if (!modmagic) {&lt;br /&gt;                err = try_to_force_load(mod, "bad vermagic");&lt;br /&gt;                if (err)&lt;br /&gt;                        return err;&lt;br /&gt;        } else if (!same_magic(modmagic, vermagic, info-&gt;index.vers)) {&lt;br /&gt;                printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",&lt;br /&gt;                       mod-&gt;name, modmagic, vermagic);&lt;br /&gt;               &lt;strong&gt; return -ENOEXEC;&lt;/strong&gt;        }&lt;br /&gt;&lt;br /&gt;        if (get_modinfo(info, "staging")) {&lt;br /&gt;                add_taint_module(mod, TAINT_CRAP);&lt;br /&gt;                printk(KERN_WARNING "%s: module is from the staging directory,"&lt;br /&gt;                       " the quality is unknown, you have been warned.\n",&lt;br /&gt;                       mod-&gt;name);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /* Set up license info based on the info section */&lt;br /&gt;        set_license(mod, get_modinfo(info, "license"));&lt;br /&gt;&lt;br /&gt;        return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8612703324496721865?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8612703324496721865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2012/01/disable-linux-kernel-version-magic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8612703324496721865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8612703324496721865'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2012/01/disable-linux-kernel-version-magic.html' title='Disable Linux  Kernel Version Magic problem while loading the module'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1861215618137540298</id><published>2012-01-01T23:47:00.001-08:00</published><updated>2012-01-01T23:47:58.595-08:00</updated><title type='text'>Service lifecycle in Android Application</title><content type='html'>A service can be used in two ways:&lt;br /&gt;1)It can be started and allowed to run until someone stops it or it stops itself. In this mode, it's started by calling Context.startService() and stopped by calling Context.stopService(). It can stop itself by calling Service.stopSelf() or Service.stopSelfResult(). Only one stopService() call is needed to stop the service, no matter how many times startService() was called.&lt;br /&gt;2)It can be operated programmatically using an interface that it defines and exports. Clients establish a connection to the Service object and use that connection to call into the service. The connection is established by calling Context.bindService(), and is closed by calling Context.unbindService(). Multiple clients can bind to the same service. If the service has not already been launched, bindService() can optionally launch it.&lt;br /&gt;The two modes are not entirely separate. You can bind to a service that was started with startService(). For example, a background music service could be started by calling startService() with an Intent object that identifies the music to play. Only later, possibly when the user wants to exercise some control over the player or get information about the current song, would an activity establish a connection to the service by calling bindService(). In cases like this, stopService() will not actually stop the service until the last binding is closed.&lt;br /&gt;&lt;br /&gt;Like an activity, a service has lifecycle methods that you can implement to monitor changes in its state. But they are fewer than the activity methods — only three — and they are public, not protected: &lt;br /&gt;void onCreate()&lt;br /&gt;void onStart(Intent intent)&lt;br /&gt;void onDestroy()&lt;br /&gt;By implementing these methods, you can monitor two nested loops of the service's lifecycle: &lt;br /&gt;1)The entire lifetime of a service happens between the time onCreate() is called and the time onDestroy() returns. Like an activity, a service does its initial setup in onCreate(), and releases all remaining resources in onDestroy(). For example, a music playback service could create the thread where the music will be played in onCreate(), and then stop the thread in onDestroy().&lt;br /&gt;2)The active lifetime of a service begins with a call to onStart(). This method is handed the Intent object that was passed to startService(). The music service would open the Intent to discover which music to play, and begin the playback.&lt;br /&gt;There's no equivalent callback for when the service stops — no onStop() method. &lt;br /&gt;The onCreate() and onDestroy() methods are called for all services, whether they're started by Context.startService() or Context.bindService(). However, onStart() is called only for services started by startService().&lt;br /&gt;&lt;br /&gt;If a service permits others to bind to it, there are additional callback methods for it to implement: &lt;br /&gt;IBinder onBind(Intent intent)&lt;br /&gt;boolean onUnbind(Intent intent)&lt;br /&gt;void onRebind(Intent intent)&lt;br /&gt;The onBind() callback is passed the Intent object that was passed to bindService and onUnbind() is handed the intent that was passed to unbindService(). If the service permits the binding, onBind() returns the communications channel that clients use to interact with the service. The onUnbind() method can ask for onRebind() to be called if a new client connects to the service.&lt;br /&gt;&lt;br /&gt;The following diagram illustrates the callback methods for a service. Although, it separates services that are created via startService from those created by bindService(), keep in mind that any service, no matter how it's started, can potentially allow clients to bind to it, so any service may receive onBind() and onUnbind() calls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1861215618137540298?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1861215618137540298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2012/01/service-lifecycle-in-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1861215618137540298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1861215618137540298'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2012/01/service-lifecycle-in-android.html' title='Service lifecycle in Android Application'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3237540435763766479</id><published>2011-12-27T22:46:00.000-08:00</published><updated>2011-12-27T22:47:43.558-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='light sensor'/><category scheme='http://www.blogger.com/atom/ns#' term='sensors'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Check Available Sensor's on your device &amp; Verify it's behaviour on Android platform.</title><content type='html'>1. enter adb shell&lt;br /&gt;&lt;br /&gt;2. execute command "getevent"&lt;br /&gt;&lt;br /&gt;o/p shows like this :&lt;br /&gt;&lt;br /&gt;add device 1: /dev/input/event8&lt;br /&gt;  name:     "qt602240_ts_input"&lt;br /&gt;could not get driver version for /dev/input/mouse0, Not a typewriter&lt;br /&gt;add device 2: /dev/input/event7&lt;br /&gt;  name:     "melfas-touchkey"&lt;br /&gt;add device 3: /dev/input/event6&lt;br /&gt;  name:     "light_sensor"&lt;br /&gt;add device 4: /dev/input/event5&lt;br /&gt;  name:     "proximity_sensor"&lt;br /&gt;add device 5: /dev/input/event4&lt;br /&gt;  name:     "aries-keypad"&lt;br /&gt;add device 6: /dev/input/event3&lt;br /&gt;  name:     "orientation_sensor"&lt;br /&gt;add device 7: /dev/input/event0&lt;br /&gt;  name:     "accelerometer_sensor"&lt;br /&gt;could not get driver version for /dev/input/mice, Not a typewriter&lt;br /&gt;add device 8: /dev/input/event2&lt;br /&gt;  name:     "raw_magnetic_sensor"&lt;br /&gt;add device 9: /dev/input/event1&lt;br /&gt;  name:     "magnetic_sensor" &lt;br /&gt;  &lt;br /&gt;3. example if you want to verify the proximity sensor execute below command.&lt;br /&gt;&lt;br /&gt;echo 1 &gt; /sys/class/input/input5/enable   //for proximity sensor&lt;br /&gt;&lt;br /&gt;4. sense the particular sensor and verify behaviour the output w.r.t sensor you enabled for shell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3237540435763766479?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3237540435763766479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2011/12/check-available-sensors-on-your-device.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3237540435763766479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3237540435763766479'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2011/12/check-available-sensors-on-your-device.html' title='Check Available Sensor&apos;s on your device &amp; Verify it&apos;s behaviour on Android platform.'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1673983552042699913</id><published>2011-09-18T17:11:00.000-07:00</published><updated>2011-09-18T17:14:19.824-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp shortcuts'/><category scheme='http://www.blogger.com/atom/ns#' term='hidden applications'/><category scheme='http://www.blogger.com/atom/ns#' term='windows xp secrect codes'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='secret codes'/><title type='text'>Windows XP hidden applications Shortcuts</title><content type='html'>Windows XP hidden applications: &lt;br /&gt;==================== &lt;br /&gt;&lt;br /&gt;Windows XP hidden applications run any of these applications&lt;br /&gt;go to Start &gt; Run and type the executable name&lt;br /&gt;&lt;br /&gt;1) Character Map = charmap.exe (very useful for finding unusual characters) &lt;br /&gt;&lt;br /&gt;2) Disk Cleanup = cleanmgr.exe &lt;br /&gt;&lt;br /&gt;3) Clipboard Viewer = clipbrd.exe (views contents of window$ clipboard) &lt;br /&gt;&lt;br /&gt;4) Dr Watson = drwtsn32.exe (Troubleshooting tool)&lt;br /&gt;&lt;br /&gt;5) DirectX diagnosis = dxdiag.exe (Diagnose &amp; test DirectX, video &amp; sound cards) &lt;br /&gt;&lt;br /&gt;6) Private character editor = eudcedit.exe (allows creation or modification of characters) &lt;br /&gt;&lt;br /&gt;7) IExpress Wizard = iexpress.exe (Create self-extracting / self-installing package) &lt;br /&gt;&lt;br /&gt;Micro$oft Synchronization Manager = mobsync.exe (appears to allow synchronization of files on the network for when working offline. Apparently undocumented). &lt;br /&gt;&lt;br /&gt;9) window$ Media Player 5.1 = mplay32.exe (Retro version of Media Player, very basic). &lt;br /&gt;&lt;br /&gt;10) ODBC Data Source Administrator = odbcad32.exe (something to do with databases) &lt;br /&gt;&lt;br /&gt;11) Object Packager = packager.exe (to do with packaging objects for insertion in files, appears to have comprehensive help files). &lt;br /&gt;&lt;br /&gt;12) System Monitor = perfmon.exe (very useful, highly configurable tool, tells you everything you ever wanted to know about any aspect of PC performance, for uber-geeks only ) &lt;br /&gt;&lt;br /&gt;13) Program Manager = progman.exe (Legacy window$ 3.x desktop shell). &lt;br /&gt;&lt;br /&gt;14) Remote Access phone book = rasphone.exe (documentation is virtually non-existant). &lt;br /&gt;&lt;br /&gt;15) Registry Editor = regedt32.exe [also regedit.exe] (for hacking the window$ Registry). &lt;br /&gt;&lt;br /&gt;16) Network shared folder wizard = shrpubw.exe (creates shared folders on network). &lt;br /&gt;&lt;br /&gt;17) File siganture verification tool = sigverif.exe &lt;br /&gt;&lt;br /&gt;1Cool Volume Control = sndvol32.exe (I've included this for those people that lose it from the System Notification area). &lt;br /&gt;&lt;br /&gt;19) System Configuration Editor = sysedit.exe (modify System.ini &amp; Win.ini just like in Win98! ). &lt;br /&gt;&lt;br /&gt;20) Syskey = syskey.exe (Secures XP Account database - use with care, it's virtually undocumented but it appears to encrypt all passwords, I'm not sure of the full implications). &lt;br /&gt;&lt;br /&gt;21) Micro$oft Telnet Client = telnet.exe &lt;br /&gt;&lt;br /&gt;22) Driver Verifier Manager = verifier.exe (seems to be a utility for monitoring the actions of drivers, might be useful for people having driver problems. Undocumented). &lt;br /&gt;&lt;br /&gt;23) window$ for Workgroups Chat = winchat.exe (appears to be an old NT utility to allow chat sessions over a LAN, help files available). &lt;br /&gt;&lt;br /&gt;24) System configuration = msconfig.exe (can use to control starup programs) &lt;br /&gt;25) gpedit.msc used to manage group policies, and permissions..!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1673983552042699913?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1673983552042699913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2011/09/windows-xp-hidden-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1673983552042699913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1673983552042699913'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2011/09/windows-xp-hidden-applications.html' title='Windows XP hidden applications Shortcuts'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5758948356715650461</id><published>2011-06-29T19:58:00.000-07:00</published><updated>2011-06-29T19:59:48.387-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='top'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='top ten browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>List of Top 10 web browsers</title><content type='html'>Top Ten Blrowser List .....&lt;br /&gt;Internet Explorer: There is no doubt that it is one of the most popular web browsers available and in use. There are several reasons of its popularity. The stronger two are - till date its free availability with windows operating system (most favored by the users) and its safe browsing promptings.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Mozilla Firefox: As an internet user, all of us know that Firefox is highly popular for its speed, so many plug-ins, built-in spell checkers and so many other features. Day by day it is also getting renovated also. Every new vision is coming out with several good plug-ins and other features.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Google Chrome: The search giant Google, has given the internet community one of the best gift – Chrome. The browser is a light weight, new interface and fast loading features. The most favored feature is its private browsing – “incognito window”. And day by day its extensions and tools are getting it highly popular.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Opera: This browser is in several ways highly popular for its attractive look and “turbo” speed. This browser is very much in use for it mobile version. The fast space and slick feature in mobile phones, this browser is gaining back its lost fame.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Apple Safari: It is fact that there is less number of Mac Ox users. But though the browser was built especially for the Mac machines, now for innovative web kits, Html 5 support and availability in other computer formats (ipod &amp; other smart phones) the browser is getting highly popular among users.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SeaMonkey: It is an all in-one latest browser developed by Mozilla foundation. It has several exciting features included – integrated email, newsgroup, html editor, IRC chat, web development tools and etc. A simple user has to like it as he or she can use several mails in tabs. At the same time developers like it for its rendering of CSS in html editor with dynamic images and table resizing. Even JavaScript debugger and DOM inspector is include in it. The browser is compatible with windows, Linux and Mac OX operating systems.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Flock: It is one of the browsers targeted towards social networking lovers. It has the feature of letting its users informed of the social networking updates. It has several features of Firefox (even powered by Firefox) and the users like to use it for this very reason only.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Maxthon: It is favorite for its powerful tabbed user interface. With all its basic browsing functionality, the tabs are strong enough to stop crashes against the running of multiple pages at a time. Its Isolator Technology creates a walls type of system that prevents tabs being frozen for the bad web pages.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;PhaseOut: It is a web browser for outer “starship navigation” panel with all the latest privacy protection shields. It comes with several “Pop-up Blocker” and “CleanUp tools” with extended options, skin database and swapping interface layout, it is gaining popularity to the internet users.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Avant: This browser is one of the ultra-fast web browsers. It has a user-friendly interface that brings efficient browsing experience with reliability. Apart from its simple common features of browsing, Avant has strong detection of malware, mouse gesture support, multi processing. Slowly it is getting popularity.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;list of top 10 web browsers. However, you can find out several portals providing several unique lists. the most important point is the usage of the users – you. Try Yourself and judge the usability of the browsers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5758948356715650461?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5758948356715650461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2011/06/list-of-top-10-web-browsers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5758948356715650461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5758948356715650461'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2011/06/list-of-top-10-web-browsers.html' title='List of Top 10 web browsers'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1749347607754606062</id><published>2011-01-13T19:29:00.000-08:00</published><updated>2011-01-13T19:31:33.732-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='4.0'/><title type='text'>Bluetooth 4.0 is expected to hit markets dis year</title><content type='html'>The Bluetooth Special Interest Group (SIG) said on Wednesday that version 4.0 of the wireless specification may be incorporated into devices by the end of the year. The new spec will bring Bluetooth to a whole new set of gadgets including watches, pedometers, and all other low-power devices that run on coin-cell batteries.&lt;br /&gt;&lt;br /&gt;This is a huge step considering that Bluetooth only resided in devices that used triple-A or larger capacity batteries. Michael Foley, executive director of the Bluetooth SIG, said that 4.0 combines both the high-speed data transfer capabilities provided by Bluetooth 3.0 with the new ability to transmit small bursts of data over short ranges.&lt;br /&gt;&lt;br /&gt;The IGD News Service reports that Bluetooth 4.0 won't offer users a major improvement in actual battery life-- only a nominal improvement at best. Foley provided an example, saying that Bluetooth 4.0 radios will see the same battery drain as Bluetooth 3.0 radios when used to sync headphones to music players, or to connect smartphones to laptops.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Charles Golvin, principal analyst at Forrester Research, said that Bluetooth 4.0 will be better than the competition because it can be deployed across a wide variety of devices, giving the tech a head start over the other technologies. Unfortunately, the data transfer rate hasn't improved: Bluetooth still shoots data from device to device at a maximum rate of 24Mb/s (BT 3.0 + HS).&lt;br /&gt;&lt;br /&gt;http://www.tomshardware.com/news/Blu...sfer,9812.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1749347607754606062?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1749347607754606062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2011/01/wednesday-april-7-2010-bluetooth-40-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1749347607754606062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1749347607754606062'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2011/01/wednesday-april-7-2010-bluetooth-40-is.html' title='Bluetooth 4.0 is expected to hit markets dis year'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8381611058339132941</id><published>2011-01-06T03:24:00.000-08:00</published><updated>2011-01-06T03:25:12.680-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android package amnaually'/><category scheme='http://www.blogger.com/atom/ns#' term='apk'/><title type='text'>How to build Android application package (.apk) Manually.</title><content type='html'>he good thing about building manually your apk is that you don’t have to name your resources directory to res, you can name it anything you want.&lt;br /&gt;&lt;br /&gt;You can find ant scripts in: &lt;SDK_HOME&gt;\platforms\android-1.5\templates\android-rules.xml&lt;br /&gt;&lt;br /&gt;Step 1: Generate Resource java code and packaged Resources&lt;br /&gt;aapt  package -f -M ${manifest.file} -F ${packaged.resource.file} -I ${path.to.android-jar.library} -S ${android-resource-directory} [-m -J ${folder.to.output.the.R.java}]&lt;br /&gt;&lt;br /&gt;Step 2: Compile java source codes + R.java&lt;br /&gt;use javac&lt;br /&gt;&lt;br /&gt;Step 3: Convert classes to Dalvik bytecodes&lt;br /&gt;use dx.bat&lt;br /&gt;dx.bat  –dex  –output=${output.dex.file}  ${compiled.classes.directory}  ${jar files..}&lt;br /&gt;&lt;br /&gt;Step 4: Create unsigned APK&lt;br /&gt;use apkbuilder&lt;br /&gt;&lt;br /&gt;apkbuilder  ${output.apk.file} -u -z  ${packagedresource.file} -f  ${dex.file}&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;apkbuilder  ${output.apk.file} -u -z  ${packagedresource.file} -f  ${dex.file}  -rf  ${source.dir}  -rj  ${libraries.dir}&lt;br /&gt;&lt;br /&gt;-rf = resources required for compiled source files?&lt;br /&gt;-rj = resources required for jar files&lt;br /&gt;&lt;br /&gt;Step 6: Generate a key&lt;br /&gt;use keytool&lt;br /&gt;&lt;br /&gt;Step 7: Sign APK&lt;br /&gt;use jarsigner&lt;br /&gt;&lt;br /&gt;jarsigner  -keystore ${keystore} -storepass  ${keystore.password} -keypass ${keypass} -signedjar ${signed.apkfile} ${unsigned.apkfile} ${keyalias}&lt;br /&gt;&lt;br /&gt;Step 8: Publish&lt;br /&gt;use adb&lt;br /&gt;adb -d install -r ${signed.apk}&lt;br /&gt;&lt;br /&gt;Inspecting your APK file:&lt;br /&gt;&lt;br /&gt;aapt list -v latest.apk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8381611058339132941?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8381611058339132941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2011/01/how-to-build-android-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8381611058339132941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8381611058339132941'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2011/01/how-to-build-android-application.html' title='How to build Android application package (.apk) Manually.'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1351027035020948901</id><published>2011-01-04T00:55:00.000-08:00</published><updated>2011-01-04T01:04:45.806-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='object oriented programming language'/><category scheme='http://www.blogger.com/atom/ns#' term='j2se'/><category scheme='http://www.blogger.com/atom/ns#' term='oops'/><category scheme='http://www.blogger.com/atom/ns#' term='is java oop language'/><title type='text'>Is Java an Object Oriented Programming Language?</title><content type='html'>A type of programming in which programmers define not only the data type of a data structure, but also the types of operations (functions) that can be applied to the data structure. In this way, the data structure becomes an object that includes both data and functions. In addition, programmers can create relationships between one object and another. For example, objects can inherit characteristics from other objects.&lt;br /&gt;&lt;br /&gt;One of the principal advantages of object-oriented programming techniques over procedural programming techniques is that they enable programmers to create modules that do not need to be changed when a new type of object is added. A programmer can simply create a new object that inherits many of its features from existing objects. This makes object-oriented programs easier to modify.&lt;br /&gt;&lt;br /&gt;To perform object-oriented programming, one needs an object-oriented programming language (OOPL). Java, C++ and Smalltalk are three of the more popular languages, and there are also object-oriented versions of Pascal. &lt;br /&gt;&lt;br /&gt;In a Simple way ..&lt;br /&gt;&lt;br /&gt;As per the definition of Object Oriented Programming, a language can be categorized as PURE OOP based on following criteria:&lt;br /&gt;&lt;br /&gt;   1.&lt;br /&gt;      The language must have inbuilt support for encapsulation and abstraction.&lt;br /&gt;   2.&lt;br /&gt;      The language must have inbuilt support for Inheritance.&lt;br /&gt;   3.&lt;br /&gt;      The language must have inbuilt support for Polymorphism.&lt;br /&gt;   4.&lt;br /&gt;      All system defined types must be objects.&lt;br /&gt;   5.&lt;br /&gt;      All user defined types must be object.&lt;br /&gt;   6.&lt;br /&gt;      The only way of communication between objects is through the methods exposed on the same.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Criteria 1 to 3 are self explanatory and don’t require further clarification. So I am escaping those. Now consider criteria 4.&lt;br /&gt;&lt;br /&gt;Criteria 4 states that all predefined types in the systems must be objects only. This means there can’t be anything other than objects defined by system. This is the first requirement where Java fails to fulfill the criteria to be categorized as pure Object Oriented Programming. Java has primitive types, which are not objects and thus violates this rule.&lt;br /&gt;&lt;br /&gt;Criteria 5 suggests that all user defined types must also be objects only. This means users can’t define or create anything other than objects. This restriction is not applicable in using system defined types. Java successfully follows this rule where user can’t create or define anything other than objects.&lt;br /&gt;&lt;br /&gt;Criteria 6 suggest that whenever objects communicate with each other, they communicate using the methods exposed on other objects. And this should be the only way of communication. Java violets this rule by using various operators. Consider the ‘+’ operator on String literals which can be used to add 2 or more string objects. By using this operator java violets the rule of object communication using methods. This holds true for other operators on primitive types as well.&lt;br /&gt;&lt;br /&gt;Summing up the above points, java fulfils the criteria 1,2,3,5 but fails in 4 and 6. Failing of these 2 criteria deprived java from being categorized as PURE Object Oriented Programming Language. But still the programming community categorizes Java as OOP (although not Pure). In theory such languages are called ‘Hybrid OOP’ languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1351027035020948901?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1351027035020948901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2011/01/is-java-object-oriented-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1351027035020948901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1351027035020948901'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2011/01/is-java-object-oriented-programming.html' title='Is Java an Object Oriented Programming Language?'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5758979127026867709</id><published>2010-12-14T20:10:00.000-08:00</published><updated>2010-12-14T20:13:02.863-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='confugure'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='steps'/><category scheme='http://www.blogger.com/atom/ns#' term='synergy'/><title type='text'>Synergy Steps to Configure</title><content type='html'>Synegry is a awesome sofware for interacting 2 pc in the network(for eg: linux &amp; windows)&lt;br /&gt;&lt;br /&gt;it like your key board &amp; mouse acts same for bothe PC's like host &amp; client.&lt;br /&gt;&lt;br /&gt;one we have to make host and second one need to use as client.&lt;br /&gt;&lt;br /&gt;Steps you can see from the below like.&lt;br /&gt;&lt;br /&gt;http://www.mattcutts.com/blog/how-to-configure-synergy-in-six-steps/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I enjoying a lot using this software. i configured it its working well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5758979127026867709?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5758979127026867709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/12/synergy-steps-to-configure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5758979127026867709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5758979127026867709'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/12/synergy-steps-to-configure.html' title='Synergy Steps to Configure'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3424005848136645686</id><published>2010-12-06T19:04:00.000-08:00</published><updated>2010-12-06T19:10:32.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new apis explanation'/><category scheme='http://www.blogger.com/atom/ns#' term='api changes'/><category scheme='http://www.blogger.com/atom/ns#' term='gingerbread.new features'/><title type='text'>Android 2.3 Platform -GingerBread</title><content type='html'>For developers, the Android 2.3 platform is available as a downloadable component for the Android SDK. The downloadable platform includes an Android library and system image, as well as a set of emulator skins and more. The downloadable platform includes no external libraries.&lt;br /&gt;&lt;br /&gt;API Overview&lt;br /&gt;&lt;br /&gt;The sections below provide a technical overview of what's new for developers in 2.3, including new features and changes in the framework API since the previous version.&lt;br /&gt;&lt;br /&gt;SIP-based VoIP&lt;br /&gt;The platform now includes a SIP protocol stack and framework API that lets developers build internet telephony applications. Using the API, applications can offer voice calling features without having to manage sessions, transport-level communication, or audio — these are handled transparently by the platform's SIP API and services.&lt;br /&gt;&lt;br /&gt;The SIP API is available in the android.net.sip package. The key class is SipManager, which applications use to set up and manage SIP profiles, then initiate audio calls and receive audio calls. Once an audio call is established, applications can mute calls, turn on speaker mode, send DTMF tones, and more. Applications can also use the SipManager to create generic SIP connections.&lt;br /&gt;&lt;br /&gt;The platform’s underlying SIP stack and services are available on devices at the discretion of the manufacturer and associated carrier. For this reason, applications should use the isApiSupported() method to check whether SIP support is available, before exposing calling functionality to users.&lt;br /&gt;&lt;br /&gt;To use the SIP API, applications must request permission from the user by declaring &lt;uses-permission android:name="android.permission.INTERNET"&gt; and &lt;br /&gt;&lt;uses-permission android:name="android.permission.USE_SIP"&gt; &lt;br /&gt;in their manifest files.&lt;br /&gt;&lt;br /&gt;Additionally, developers can request filtering on Android Market, such that their applications are not discoverable to users whose devices do not include the platform’s SIP stack and services. &lt;br /&gt;&lt;br /&gt;To request filtering,&lt;br /&gt; add &lt;uses-feature android:name="android.software.sip" android:required="true"&gt; and &lt;uses-feature android:name="android.software.sip.voip"&gt; to the application manifest.&lt;br /&gt;&lt;br /&gt;Near Field Communications (NFC)&lt;br /&gt;Android 2.3 includes an NFC stack and framework API that lets developers read NDEF tags that are discovered as a user touches an NFC-enabled device to tag elements embedded in stickers, smart posters, and even other devices.&lt;br /&gt;&lt;br /&gt;The platform provides the underlying NFC services that work with the device hardware to discover tags when they come into range. On discovering a tag, the platform notifies applications by broadcasting an Intent, appending the tag's NDEF messages to the Intent as extras. Applications can create Intent filters to recognize and handle targeted tags and messages. For example, after receiving a tag by Intent, applications extract the NDEF messages, store them, alert the user, or handle them in other ways.&lt;br /&gt;&lt;br /&gt;The NFC API is available in the android.nfc package. The key classes are:&lt;br /&gt;&lt;br /&gt;NfcAdapter, which represents the NFC hardware on the device.&lt;br /&gt;NdefMessage, which represents an NDEF data message, the standard format in which "records" carrying data are transmitted between devices and tags. Applications can receive these messages from ACTION_TAG_DISCOVERED Intents.&lt;br /&gt;NdefRecord, delivered in an NdefMessage, which describes the type of data being shared and carries the data itself.&lt;br /&gt;NFC communication relies on wireless technology in the device hardware, so support for the platform's NFC features on specific devices is determined by their manufacturers. To determine the NFC support on the current device, applications can call isEnabled() to query the NfcAdapter. The NFC API is always present, however, regardless of underlying hardware support.&lt;br /&gt;&lt;br /&gt;To use the NFC API, applications must request permission from the user by declaring &lt;uses-permission android:name="android.permission.NFC"&gt; in their manifest files.&lt;br /&gt;&lt;br /&gt;Additionally, developers can request filtering on Android Market, such that their applications are not discoverable to users whose devices do not support NFC.&lt;br /&gt;&lt;br /&gt;To request filtering, add &lt;uses-feature android:name="android.hardware.nfc" android:required="true"&gt; to the application's manifest.&lt;br /&gt;&lt;br /&gt;Gyroscope and other sensors&lt;br /&gt;Android 2.3 adds platform and API support for several new sensor reading types — gyroscope, rotation vector, linear acceleration, gravity, and barometer. Developers can use the new sensor readings to create applications that respond quickly and smoothly to precise changes in device position and motion. The Sensor API reports gyroscope and other sensor changes to interested applications, whether they are running on the application framework or in native code.&lt;br /&gt;&lt;br /&gt;Note that the specific set of hardware sensors available on any given device varies at the discretion of the device manufacturer.&lt;br /&gt;&lt;br /&gt;Developers can request filtering in Android Market, such that their applications are not discoverable to users whose devices do not offer a gyroscope sensor. &lt;br /&gt;&lt;br /&gt;To do so, add &lt;uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"&gt; to the application manifest.&lt;br /&gt;&lt;br /&gt;Multiple cameras support&lt;br /&gt;Applications can now make use of any cameras that are available on a device, for either photo or video capture. The Camera lets applications query for the number of cameras available and the unique characteristics of each.&lt;br /&gt;&lt;br /&gt;New Camera.CameraInfo class stores a camera's positional characteristics (orientation, front-facing or back-facing).&lt;br /&gt;New getNumberOfCameras(), getCameraInfo(), and getNumberOfCameras() methods in the Camera class let applications query for the cameras available and open the camera that they need.&lt;br /&gt;&lt;br /&gt;New get() method lets applications retrieve a CamcorderProfile for a specific camera.&lt;br /&gt;New getJpegEncodingQualityParameter() lets applications obtain the still-image capture quality level for a specific camera.&lt;br /&gt;&lt;br /&gt;The Camera API also adds:&lt;br /&gt;&lt;br /&gt;New parameters for cameras, including focus distance, focus mode, and preview fps maximum/minimum. New getFocusDistances(), getPreviewFpsRange(), and getSupportedPreviewFpsRange() for getting camera parameters, as well as setPreviewFpsRange() for setting preview framerate.&lt;br /&gt;&lt;br /&gt;Mixable audio effects&lt;br /&gt;The platform's media framework adds support for new per-track or global audio effects, including bass boost, headphone virtualization, equalization, and reverb.&lt;br /&gt;&lt;br /&gt;New android.media.audiofx package provides the API to access audio effects.&lt;br /&gt;New AudioEffect is the base class for controlling audio effects provided by the Android audio framework.&lt;br /&gt;New audio session ID that lets an application associate a set of audio effects with an instance of AudioTrack or MediaPlayer.&lt;br /&gt;New AudioTrack class constructor that lets you create an AudioTrack with a specific session ID. New attachAuxEffect(), getAudioSessionId(), and setAuxEffectSendLevel() methods.&lt;br /&gt;New attachAuxEffect(), getAudioSessionId(), setAudioSessionId(int), and setAuxEffectSendLevel() methods and supporting types.&lt;br /&gt;&lt;br /&gt;The media framework also adds:&lt;br /&gt;&lt;br /&gt;New support for altitude tag in EXIF metadata for JPEG files. New method getAltitude() method to retrieve the value of the EXIF altitude tag.&lt;br /&gt;New setOrientationHint() method lets an application tell MediaRecorder of the orientation during video capture.&lt;br /&gt;&lt;br /&gt;Download manager&lt;br /&gt;The platform includes a new DownloadManager system service that handles long-running HTTP downloads. Applications can request that a URI be downloaded to a particular destination file. The DownloadManager will conduct the download in the background, taking care of HTTP interactions and retrying downloads after failures or across connectivity changes and system reboots.&lt;br /&gt;&lt;br /&gt;Applications can obtain an instance of the DownloadManager class by calling getSystemService(String) and passing DOWNLOAD_SERVICE. &lt;br /&gt;&lt;br /&gt;Applications that request downloads through this API should register a broadcast receiver for ACTION_NOTIFICATION_CLICKED, to appropriately handle when the user clicks on a running download in a notification or from the Downloads UI.&lt;br /&gt;&lt;br /&gt;The DownloadManager Request class lets an application provide all the information necessary to request a new download, such as request URI and download destination. A request URI is the only required parameter. Note that the default download destination is a shared volume where the system can delete your file if it needs to reclaim space for system use. For persistent storage of a download, specify a download destination on external storage (see setDestinationUri(Uri)).&lt;br /&gt;The DownloadManager.Query class provides methods that let an application query for and filter active downloads.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;StrictMode&lt;br /&gt;To help developers monitor and improve the performance of their applications, the platform offers a new system facility called StrictMode. When implemented in an application, StrictMode catches and notifies the developer of accidental disk or network activity that could degrade application performance, such as activity taking place on the application's main thread (where UI operations are received and animations are also taking place). Developers can evaluate the network and disk usages issues raised in StrictMode and correct them if needed, keeping the main thread more responsive and preventing ANR dialogs from being shown to users.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;StrictMode &lt;/span&gt;is the core class and is the main integration point with the system and VM. The class provides convenience methods for managing the thread and VM policies that apply to the instance.&lt;br /&gt;StrictMode.ThreadPolicy and StrictMode.VmPolicy hold the policies that you define and apply to thread and VM instances.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UI Framework&lt;br /&gt;&lt;br /&gt;Support for overscroll&lt;br /&gt;New support for overscroll in Views and Widgets. In Views, applications can enable/disable overscroll for a given view, set the overscoll mode, control the overscroll distance, and handle the results of overscrolling.&lt;br /&gt;In Widgets, applications can control overscroll characteristics such as animation, springback, and overscroll distance. For more information, see android.view.View and android.widget.OverScroller.&lt;br /&gt;ViewConfiguration also provides methods getScaledOverflingDistance() and getScaledOverscrollDistance().&lt;br /&gt;&lt;br /&gt;New overScrollMode, overScrollFooter, and overScrollHeader attributes for &lt;ListView&gt; elements, for controlling overscroll behavior.&lt;br /&gt;Support for touch filtering&lt;br /&gt;New support for touch filtering, which lets an application improve the security of Views that provide access to sensitive functionality. For example, touch filtering is appropriate to ensure the security of user actions such as granting a permission request, making a purchase, or clicking on an advertisement. For details, see the &lt;br /&gt;&lt;br /&gt;View class documentation.&lt;br /&gt;New filterTouchesWhenObscured attribute for view elements, which declares whether to filter touches when the view's window is obscured by another visible window. When set to "true", the view will not receive touches whenever a toast, dialog or other window appears above the view's window. Refer to View security documentation for details.&lt;br /&gt;To look at sample code for touch filtering, see SecureView.java in the ApiDemos sample application.&lt;br /&gt;&lt;br /&gt;Improved event management&lt;br /&gt;New base class for input events, InputEvent. The class provides methods that let applications determine the meaning of the event, such as by querying for the InputDevice from which the event orginated. The KeyEvent and MotionEvent are subclasses of InputEvent.&lt;br /&gt;New base class for input devices, InputDevice. The class stores information about the capabilities of a particular input device and provides methods that let applications determine how to interpret events from an input device.&lt;br /&gt;&lt;br /&gt;Improved motion events&lt;br /&gt;The MotionEvent API is extended to include "pointer ID" information, which lets applications to keep track of individual fingers as they move up and down. The class adds a variety of methods that let an application work efficiently with motion events.&lt;br /&gt;The input system now has logic to generate motion events with the new pointer ID information, synthesizing identifiers as new pointers are down. The system tracks multiple pointer IDs separately during a motion event, and ensures proper continuity of pointers by evaluating at the distance between the last and next set of pointers.&lt;br /&gt;&lt;br /&gt;Text selection controls&lt;br /&gt;A new setComposingRegion method lets an application mark a region of text as composing text, maintaining the current styling. A getSelectedText method returns the selected text to the application. The methods are available in BaseInputConnection, InputConnection, and InputConnectionWrapper.&lt;br /&gt;New textSelectHandle, textSelectHandleLeft, textSelectHandleRight, and textSelectHandleWindowStyle attributes for &lt;TextView&gt;, for referencing drawables that will be used to display text-selection anchors and the style for the containing window.&lt;br /&gt;&lt;br /&gt;Activity controls&lt;br /&gt;ActivityInfo adds new constants for managing Activity orientation: SCREEN_ORIENTATION_FULL_SENSOR, SCREEN_ORIENTATION_REVERSE_LANDSCAPE, SCREEN_ORIENTATION_REVERSE_PORTRAIT, SCREEN_ORIENTATION_SENSOR_LANDSCAPE, and SCREEN_ORIENTATION_SENSOR_PORTRAIT.&lt;br /&gt;&lt;br /&gt;New constant IMPORTANCE_PERCEPTIBLE for the importance field in ActivityManager.RunningAppProcessInfo. The value indicates that a specific process is running something that is considered to be actively perceptible to the user. An example would be an application performing background music playback.&lt;br /&gt;&lt;br /&gt;The setPersistent(boolean) method to mark an Activity as persistent is now deprecated and the implementation is a no-op.&lt;br /&gt;Notification text and icon styles&lt;br /&gt;&lt;br /&gt;New TextAppearance.StatusBar.EventContent, &lt;br /&gt;TextAppearance.StatusBar.EventContent.Title, TextAppearance.StatusBar.Icon, and &lt;br /&gt;TextAppearance.StatusBar.Title for managing notification style.&lt;br /&gt;&lt;br /&gt;WebView&lt;br /&gt;New setUseWebViewBackgroundForOverscrollBackground() method lets a WebView specify whether to use its own background for the overscroll background.&lt;br /&gt;&lt;br /&gt;Extra Large Screens&lt;br /&gt;The platform now supports extra large screen sizes, such as those that might be found on tablet devices. Developers can indicate that their applications are designed to support extra large screen sizes by adding a &lt;supports screens ... android:xlargeScreens="true"&gt; element to their manifest files. Applications can use a new resource qualifier, xlarge, to tag resources that are specific to extra large screens. For details on how to support extra large and other screen sizes, see Supporting Multiple Screens.&lt;br /&gt;&lt;br /&gt;Graphics&lt;br /&gt;Adds remaining OpenGL ES 2.0 methods glDrawElements() and glVertexAttribPointer() in the android.opengl.GLES20 class.&lt;br /&gt;Adds support for YV12 pixel format, a planar 4:2:0 YCrCb format.&lt;br /&gt;Content Providers&lt;br /&gt;&lt;br /&gt;New AlarmClock provider class for setting an alarm or handling an alarm. The provider contains a ACTION_SET_ALARM Intent action and extras that can be used to start an Activity to set a new alarm in an alarm clock application. Applications that wish to receive the SET_ALARM Intent should create an activity that requires the the SET_ALARM permission. Applications that wish to create a new alarm should use Context.startActivity(), so that the user has the option of choosing which alarm clock application to use.&lt;br /&gt;&lt;br /&gt;MediaStore supports a new Intent action, PLAY_FROM_SEARCH, that lets an application search for music media and automatically play content from the result when possible. For example, an application could fire this Intent as the result of a voice recognition command to listen to music.&lt;br /&gt;&lt;br /&gt;MediaStore also adds a new MEDIA_IGNORE_FILENAME flag that tells the media scanner to ignore media in the containing directory and its subdirectories. Developers can use this to avoid having graphics appear in the Gallery and likewise prevent application sounds and music from showing up in the Music app.&lt;br /&gt;&lt;br /&gt;The Settings provider adds the new Activity actions APPLICATION_DETAILS_SETTINGS and MANAGE_ALL_APPLICATIONS_SETTINGS, which let an application show the details screen for a specific application or show the Manage Applications screen.&lt;br /&gt;The ContactsContract provider adds the ContactsContract.CommonDataKinds.SipAddress data kind, for storing a contact's SIP (Internet telephony) address.&lt;br /&gt;Location&lt;br /&gt;&lt;br /&gt;The LocationManager now tracks application requests that result in wake locks or wifi locks according to WorkSource, a system-managed class that identifies the application.&lt;br /&gt;The LocationManager keeps track of all clients requesting periodic updates, and tells its providers about them as a WorkSource parameter, when setting their minimum update times. The network location provider uses WorkSource to track the wake and wifi locks initiated by an application and adds it to the application's battery usage reported in Manage Applications.&lt;br /&gt;The LocationManager adds several new methods that let an Activity register to receive periodic or one-time location updates based on specified criteria (see below).&lt;br /&gt;A new Criteria class lets an application specify a set of criteria for selecting a location provider. For example, providers may be ordered according to accuracy, power usage, ability to report altitude, speed, and bearing, and monetary cost.&lt;br /&gt;&lt;br /&gt;Storage&lt;br /&gt;Android 2.3 adds a new StorageManager that supports OBB (Opaque Binary Blob) files. Although platform support for OBB is available in Android 2.3, development tools for creating and managing OBB files will not be availble until early 2011.&lt;br /&gt;The Android 2.3 platform adds official support for devices that do not include SD cards (although it provides virtual SD Card partition, when no physical SD card is available). A convenience method, isExternalStorageRemovable(), lets applications determine whether a physical SD card is present.&lt;br /&gt;&lt;br /&gt;Package Manager&lt;br /&gt;New constants for declaring hardware and software features. See the list in the New Feature Constants section, below.&lt;br /&gt;PackageInfo adds new firstInstallTime and lastUpdateTime fields that store the time of the package installation and last update.&lt;br /&gt;New getProviderInfo() method for retrieving all of the information known about a particular content provider class.&lt;br /&gt;&lt;br /&gt;Telephony&lt;br /&gt;The TelephonyManager adds the constant NETWORK_TYPE_EVDO_B for specifying the CDMA EVDO Rev B network type.&lt;br /&gt;New getPsc() method returns the primary scrambling code of the serving cell on a UMTS network.&lt;br /&gt;Native access to Activity lifecycle, windows&lt;br /&gt;Android 2.3 exposes a broad set of APIs to applications that use native code. Framework classes of interest to such applications include:&lt;br /&gt;&lt;br /&gt;NativeActivity is a new type of Activity class, whose lifecycle callbacks are implemented directly in native code. A NativeActivity and its underlying native code run in the system just as do other Activities — specifically they run in the Android application's system process and execute on the application's main UI thread, and they receive the same lifecycle callbacks as do other Activities.&lt;br /&gt;New InputQueue class and callback interface lets native code manage event queueing.&lt;br /&gt;New SurfaceHolder.Callback2 interface lets native code manage a SurfaceHolder.&lt;br /&gt;New takeInputQueue and takeSurface() methods in Window let native code manage events and surfaces.&lt;br /&gt;For full information on working with native code or to download the NDK, see the Android NDK page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dalvik Runtime&lt;br /&gt;dalvik.system removes several classes that were previously deprecated.&lt;br /&gt;Dalvik core libraries:&lt;br /&gt;New collections: ArrayDeque, NavigableMap, ConcurrentSkipListMap, LinkedBlockingDeque&lt;br /&gt;New Arrays utilities: binarySearch(), copyOf(), copyOfRange(), and others.&lt;br /&gt;CookieManager for HttpURLConnection.&lt;br /&gt;More complete network APIs: InterfaceAddress, NetworkInterface and IDN&lt;br /&gt;File read and write controls&lt;br /&gt;String.isEmpty()&lt;br /&gt;Normalizer and Normalizer.Form&lt;br /&gt;Improved javax.net.ssl server sockets.&lt;br /&gt;New manifest elements and attributes&lt;br /&gt;New xlargeScreens attribute for &lt;supports-screens&gt; element, to indicate whether the application supports extra large screen form-factors. &lt;br /&gt;&lt;br /&gt;For details, see Supporting &lt;br /&gt;Multiple Screens.&lt;br /&gt;New values for android:screenOrientation attribute of &lt;activity&gt; element:&lt;br /&gt;"reverseLandscape" — The Activity would like to have the screen in landscape orientation, turned in the opposite direction from normal landscape.&lt;br /&gt;"reversePortait" — The Activity would like to have the screen in portrait orientation, turned in the opposite direction from normal portrait.&lt;br /&gt;"sensorLandscape" — The Activity would like to have the screen in landscape orientation, but can use the sensor to change which direction the screen is facing.&lt;br /&gt;"sensorPortrait" — The Activity would like to have the screen in portrait orientation, but can use the sensor to change which direction the screen is facing.&lt;br /&gt;"fullSensor" — Orientation is determined by a physical orientation sensor: the display will rotate based on how the user moves the device. This allows any of the 4 possible rotations, regardless of what the device will normally do (for example some devices won't normally use 180 degree rotation).&lt;br /&gt;New Permissions&lt;br /&gt;com.android.permission.SET_ALARM — Allows an application to broadcast an Intent to set an alarm for the user. An Activity that handles the SET_ALARM Intent action should require this permission.&lt;br /&gt;android.permission.USE_SIP — Allows an application to use the SIP API to make or receive internet calls.&lt;br /&gt;android.permission.NFC — Allows an application to use the NFC API to read NFC tags.&lt;br /&gt;New Feature Constants&lt;br /&gt;The platform adds several new hardware features that developers can declare in their application manifests as being required by their applications. This lets developers control how their application is filtered, when published on Android Market.&lt;br /&gt;&lt;br /&gt;android.hardware.audio.low_latency — The application uses a low-latency audio pipeline on the device and is sensitive to delays or lag in sound input or output.&lt;br /&gt;android.hardware.camera.front — The application uses a front-facing camera on the device.&lt;br /&gt;&lt;br /&gt;android.hardware.nfc — The application uses NFC radio features in the device.&lt;br /&gt;android.hardware.sensor.barometer — The application uses the device's barometer.&lt;br /&gt;android.hardware.sensor.gyroscope — The application uses the device's gyroscope sensor.&lt;br /&gt;android.software.sip — The application uses the SIP API on the device.&lt;br /&gt;android.software.sip.voip — The application uses a SIP-based VoIP service on the device.&lt;br /&gt;&lt;br /&gt;android.hardware.touchscreen.multitouch.jazzhand — The application uses advanced multipoint multitouch capabilities on the device screen, for tracking five or more points fully independently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3424005848136645686?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3424005848136645686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/12/android-23-platform-gingerbread.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3424005848136645686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3424005848136645686'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/12/android-23-platform-gingerbread.html' title='Android 2.3 Platform -GingerBread'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-6711080358505536791</id><published>2010-12-06T19:01:00.000-08:00</published><updated>2010-12-06T19:02:13.426-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2.3'/><category scheme='http://www.blogger.com/atom/ns#' term='sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='gingerbread'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android 2.3 Platform Highlights</title><content type='html'>The Android 2.3 platform introduces many new and exciting features for users and developers. This document provides a glimpse at some of the new features and technologies in Android 2.3. For detailed information about the new developer APIs, see the Android 2.3 version notes.&lt;br /&gt;&lt;br /&gt;New User Features&lt;br /&gt;New Developer Features&lt;br /&gt;New Platform Technologies&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;New User Features&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UI refinements for simplicity and speed&lt;br /&gt;The user interface is refined in many ways across the system, making it easier to learn, faster to use, and more power-efficient. A simplified visual theme of colors against black brings vividness and contrast to the notification bar, menus, and other parts of the UI. Changes in menus and settings make it easier for the user to navigate and control the features of the system and device.&lt;br /&gt;&lt;br /&gt;Faster, more intuitive text input&lt;br /&gt;The Android soft keyboard is redesigned and optimized for faster text input and editing. The keys themselves are reshaped and repositioned for improved targeting, making them easier to see and press accurately, even at high speeds. The keyboard also displays the current character and dictionary suggestions in a larger, more vivid style that is easier to read.&lt;br /&gt;&lt;br /&gt;The keyboard adds the capability to correct entered words from suggestions in the dictionary. As the user selects a word already entered, the keyboard displays suggestions that the user can choose from, to replace the selection. The user can also switch to voice input mode to replace the selection. Smart suggestions let the user accept a suggestion and then return to correct it later, if needed, from the original set of suggestions.&lt;br /&gt;&lt;br /&gt;New multitouch key-chording lets the user quickly enter numbers and symbols by pressing Shift+&lt;letter&gt; and ?123+&lt;symbol&gt;, without needing to manually switch input modes. From certain keys, users can also access a popup menu of accented characters, numbers, and symbols by holding the key and sliding to select a character.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;One-touch word selection and copy/paste&lt;br /&gt;When entering text or viewing a web page, the user can quickly select a word by press-hold, then copy to the clipboard and paste. Pressing on a word enters a free-selection mode — the user can adjust the selection area as needed by dragging a set of bounding arrows to new positions, then copy the bounded area by pressing anywhere in the selection area. For text entry, the user can slide-press to enter a cursor mode, then reposition the cursor easily and accurately by dragging the cursor arrow. With both the selection and cursor modes, no use of a trackball is needed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Improved power management&lt;br /&gt;The Android system takes a more active role in managing apps that are keeping the device awake for too long or that are consuming CPU while running in the background. By managing such apps — closing them if appropriate — the system helps ensure best possible performance and maximum battery life.&lt;br /&gt;&lt;br /&gt;The system also gives the user more visibility over the power being consumed by system components and running apps. The Application settings provides an accurate overview of how the battery is being used, with details of the usage and relative power consumed by each component or application.&lt;br /&gt;&lt;br /&gt;Control over applications&lt;br /&gt;A shortcut to the Manage Applications control now appears in the Options Menu in the Home screen and Launcher, making it much easier to check and manage application activity. Once the user enters Manage Applications, a new Running tab displays a list of active applications and the storage and memory being used by each. The user can read further details about each application and if necessary stop an application or report feedback to its developer.&lt;br /&gt;&lt;br /&gt;New ways of communicating, organizing&lt;br /&gt;An updated set of standard applications lets the user take new approaches to managing information and relationships.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Internet calling&lt;br /&gt;&lt;br /&gt;The user can make voice calls over the internet to other users who have SIP accounts. The user can add an internet calling number (a SIP address) to any Contact and can initiate a call from Quick Contact or Dialer. To use internet calling, the user must create an account at the SIP provider of their choice — SIP accounts are not provided as part of the internet calling feature. Additionally, support for the platform's SIP and internet calling features on specific devices is determined by their manufacturers and associated carriers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Near-field communications&lt;br /&gt;&lt;br /&gt;An NFC Reader application lets the user read and interact with near-field communication (NFC) tags. For example, the user can “touch” or “swipe” an NFC tag that might be embedded in a poster, sticker, or advertisement, then act on the data read from the tag. A typical use would be to read a tag at a restaurant, store, or event and then rate or register by jumping to a web site whose URL is included in the tag data. NFC communication relies on wireless technology in the device hardware, so support for the platform's NFC features on specific devices is determined by their manufacturers.&lt;br /&gt;&lt;br /&gt;Downloads management&lt;br /&gt;&lt;br /&gt;The Downloads application gives the user easy access to any file downloaded from the browser, email, or another application. Downloads is built on an completely new download manager facility in the system that any other applications can use, to more easily manage and store their downloads.&lt;br /&gt;&lt;br /&gt;Camera&lt;br /&gt;&lt;br /&gt;The application now lets the user access multiple cameras on the device, including a front-facing camera, if available.&lt;br /&gt;&lt;br /&gt;New Developer Features&lt;br /&gt;&lt;br /&gt;Android 2.3 delivers a variety of features and APIs that let developers bring new types of applications to the Android platform.&lt;br /&gt;&lt;br /&gt;Enhancements for gaming&lt;br /&gt;New forms of communication&lt;br /&gt;Rich multimedia&lt;br /&gt;Enhancements for gaming&lt;br /&gt;Performance&lt;br /&gt;&lt;br /&gt;Android 2.3 includes a variety of improvements across the system that make common operations faster and more efficient for all applications. Of particular interest to game developers are:&lt;br /&gt;&lt;br /&gt;Concurrent garbage collector — The Dalivik VM introduces a new, concurrent garbage collector that minimizes application pauses, helping to ensure smoother animation and increased responsiveness in games and similar applications.&lt;br /&gt;Faster event distribution — The plaform now handles touch and keyboard events faster and more efficiently, minimizing CPU utilization during event distribution. The changes improve responsiveness for all applications, but especially benefit games that use touch events in combination with 3D graphics or other CPU-intensive operations.&lt;br /&gt;Updated video drivers — The platform uses updated third-party video drivers that improve the efficiency of OpenGL ES operations, for faster overall 3D graphics performance.&lt;br /&gt;Native input and sensor events&lt;br /&gt;&lt;br /&gt;Applications that use native code can now receive and process input and sensor events directly in their native code, which dramatically improves efficiency and responsiveness.&lt;br /&gt;&lt;br /&gt;Native libraries exposed by the platform let applications handle the same types of input events as those available through the framework. Applications can receive events from all supported sensor types and can enable/disable specific sensors and manage event delivery rate and queueing.&lt;br /&gt;&lt;br /&gt;Gyroscope and other new sensors, for improved 3D motion processing&lt;br /&gt;&lt;br /&gt;Android 2.3 adds API support for several new sensor types, including gyroscope, rotation vector, linear acceleration, gravity, and barometer sensors. Applications can use the new sensors in combination with any other sensors available on the device, to track three-dimensional device motion and orientation change with high precision and accuracy. For example, a game application could use readings from a gyroscope and accelerometer on the device to recognize complex user gestures and motions, such as tilt, spin, thrust, and slice.&lt;br /&gt;&lt;br /&gt;Open API for native audio&lt;br /&gt;&lt;br /&gt;The platform provides a software implementation of Khronos OpenSL ES, a standard API that gives applications access to powerful audio controls and effects from native code. Applications can use the API to manage audio devices and control audio input, output, and processing directly from native code.&lt;br /&gt;&lt;br /&gt;Native graphics management&lt;br /&gt;&lt;br /&gt;The platform provides an interface to its Khronos EGL library, which lets applications manage graphics contexts and create and manage OpenGL ES textures and surfaces from native code.&lt;br /&gt;&lt;br /&gt;Native access to Activity lifecycle, window management&lt;br /&gt;&lt;br /&gt;Native applications can declare a new type of Activity class, NativeActivity whose lifecycle callbacks are implemented directly in native code. The NativeActivity and its underlying native code run in the system just as do other Activities — they run in the application's system process and execute on the application's main UI thread, and they receive the same lifecycle callbacks as do other Activities.&lt;br /&gt;&lt;br /&gt;The platform also exposes native APIs for managing windows, including the ability to lock/unlock the pixel buffer to draw directly into it. Through the API, applications can obtain a native window object associated with a framework Surface object and interact with it directly in native code.&lt;br /&gt;&lt;br /&gt;Native access to assets, storage&lt;br /&gt;&lt;br /&gt;Applications can now access a native Asset Manager API to retrieve application assets directly from native code without needing to go through JNI. If the assets are compressed, the platform does streaming decompression as the application reads the asset data. There is no longer a limit on the size of compressed .apk assets that can be read.&lt;br /&gt;&lt;br /&gt;Additionally, applications can access a native Storage Manager API to work directly with OBB files downloaded and managed by the system. Note that although platform support for OBB is available in Android 2.3, development tools for creating and managing OBB files will not be available until early 2011.&lt;br /&gt;&lt;br /&gt;Robust native development environment&lt;br /&gt;&lt;br /&gt;The Android NDK (r5 or higher) provides a complete set of tools, toolchains, and libraries for developing applications that use the rich native environment offered by the Android 2.3 platform. For more information or to download the NDK, please see the Android NDK page.&lt;br /&gt;&lt;br /&gt;New forms of communication&lt;br /&gt;Internet telephony&lt;br /&gt;&lt;br /&gt;Developers can now add SIP-based internet telephony features to their applications. Android 2.3 includes a full SIP protocol stack and integrated call management services that let applications easily set up outgoing and incoming voice calls, without having to manage sessions, transport-level communication, or audio record or playback directly.&lt;br /&gt;&lt;br /&gt;Support for the platform's SIP and internet calling features on specific devices is determined by their manufacturers and associated carriers.&lt;br /&gt;&lt;br /&gt;Near Field Communications (NFC)&lt;br /&gt;&lt;br /&gt;The platform's support for Near Field Communications (NFC) lets developers get started creating a whole new class of applications for Android. Developers can create new applications that offer proximity-based information and services to users, organizations, merchants, and advertisers.&lt;br /&gt;&lt;br /&gt;Using the NFC API, applications can respond to NFC tags “discovered” as the user “touches” an NFC-enabled device to elements embedded in stickers, smart posters, and even other devices. When a tag of interest is collected, applications can respond to the tag, read messages from it, and then store the messages, prompting the user as needed.&lt;br /&gt;&lt;br /&gt;NFC communication relies on wireless technology in the device hardware, so support for the platform's NFC features on specific devices is determined by their manufacturers.&lt;br /&gt;&lt;br /&gt;Rich multimedia&lt;br /&gt;Mixable audio effects&lt;br /&gt;&lt;br /&gt;A new audio effects API lets developers easily create rich audio environments by adding equalization, bass boost, headphone virtualization (widened soundstage), and reverb to audio tracks and sounds. Developers can mix multiple audio effects in a local track or apply effects globally, across multiple tracks.&lt;br /&gt;&lt;br /&gt;Support for new media formats&lt;br /&gt;&lt;br /&gt;The platform now offers built-in support for the VP8 open video compression format and the WebM open container format. The platform also adds support for AAC encoding and AMR wideband encoding (in software), so that applications can capture higher quality audio than narrowband.&lt;br /&gt;&lt;br /&gt;Access to multiple cameras&lt;br /&gt;&lt;br /&gt;The Camera API now lets developers access any cameras that are available on a device, including a front-facing camera. Applications can query the platform for the number of cameras on the device and their types and characteristics, then open the camera needed. For example, a video chat application might want to access a front-facing camera that offers lower-resolution, while a photo application might prefer a back-facing camera that offers higher-resolution.&lt;br /&gt;&lt;br /&gt;New Platform Technologies&lt;br /&gt;&lt;br /&gt;Media Framework&lt;br /&gt;New media framework fully replaces OpenCore, maintaining all previous codec/container support for encoding and decoding.&lt;br /&gt;Integrated support for the VP8 open video compression format and the WebM open container format&lt;br /&gt;Adds AAC encoding and AMR wideband encoding&lt;br /&gt;Linux Kernel&lt;br /&gt;Upgraded to 2.6.35&lt;br /&gt;Networking&lt;br /&gt;SIP stack, configurable by device manufacturer&lt;br /&gt;Support for Near Field Communications (NFC), configurable by device manufacturer&lt;br /&gt;Updated BlueZ stack&lt;br /&gt;Dalvik runtime&lt;br /&gt;Dalvik VM:&lt;br /&gt;Concurrent garbage collector (target sub-3ms pauses)&lt;br /&gt;Adds further JIT (code-generation) optimizations&lt;br /&gt;Improved code verification&lt;br /&gt;StrictMode debugging, for identifying performance and memory issues&lt;br /&gt;Core libraries:&lt;br /&gt;Expanded I18N support (full worldwide encodings, more locales)&lt;br /&gt;Faster Formatter and number formatting. For example, float formatting is 2.5x faster.&lt;br /&gt;HTTP responses are gzipped by default. XML and JSON API response sizes may be reduced by 60% or more.&lt;br /&gt;New collections and utilities APIs&lt;br /&gt;Improved network APIs&lt;br /&gt;Improved file read and write controls&lt;br /&gt;Updated JDBC&lt;br /&gt;Updates from upstream projects:&lt;br /&gt;OpenSSL 1.0.0a&lt;br /&gt;BouncyCastle 1.45&lt;br /&gt;ICU 4.4&lt;br /&gt;zlib 1.2.5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-6711080358505536791?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/6711080358505536791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/12/android-23-platform-highlights.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/6711080358505536791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/6711080358505536791'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/12/android-23-platform-highlights.html' title='Android 2.3 Platform Highlights'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5673521361234380144</id><published>2010-11-30T20:10:00.000-08:00</published><updated>2010-11-30T20:13:05.438-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android – Displaying Dialogs From Background Threads'/><category scheme='http://www.blogger.com/atom/ns#' term='BadTokenException'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>android.view.WindowManager$BadTokenException &amp; Android – Displaying Dialogs From Background Threads</title><content type='html'>Having threads to do some heavy lifting and long processing in the background is pretty standard stuff. Very often you would want to notify or prompt the user after the background task has finished by displaying a Dialog.&lt;br /&gt;&lt;br /&gt;The displaying of the Dialog has to happen on the UI thread, so you would do that either in the Handler object for the thread or in the onPostExecute method of an AsyncTask (which is a thread as well, just an easier way of implementing it). That is a textbook way of doing this and you would think that pretty much nothing wrong could go with this.&lt;br /&gt;&lt;br /&gt;Surprisingly I found out that something CAN actually go wrong with this. After Google updated the Android Market and started giving crash reports to the developers I received the following exception:&lt;br /&gt;&lt;br /&gt;android.view.WindowManager$BadTokenException: Unable to add window — token android.os.BinderProxy@447a6748 is not valid; is your activity running?&lt;br /&gt;at android.view.ViewRoot.setView(ViewRoot.java:468)&lt;br /&gt;at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)&lt;br /&gt;at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)&lt;br /&gt;at android.view.Window$LocalWindowManager.addView(Window.java:424)&lt;br /&gt;at android.app.Dialog.show(Dialog.java:239)&lt;br /&gt;at android.app.Activity.showDialog(Activity.java:2488)&lt;br /&gt;…&lt;br /&gt;at android.os.Handler.dispatchMessage(Handler.java:99)&lt;br /&gt;…&lt;br /&gt;&lt;br /&gt;I only got a couple of these exceptions from thousands of installs, so I knew that was not anything that happens regularly or that it was easy to replicate.&lt;br /&gt;&lt;br /&gt;Looking at the stack trace above it gives us a pretty good idea why it failed. It started in the Handler object, which naturally was called by a background thread after it finished its processing. The Handler instance tried to show a Dialog and before it could show it, it tried to set the View for it and then it failed with:&lt;br /&gt;&lt;br /&gt;android.view.WindowManager$BadTokenException: Unable to add window — token android.os.BinderProxy@447a6748 is not valid; is your activity running?&lt;br /&gt;&lt;br /&gt;The 447a6748 number is just a memory address of an object that no longer exists.&lt;br /&gt;&lt;br /&gt;Note- do not get hung up on the exact number. It would be different with every execution.&lt;br /&gt;&lt;br /&gt;Now we know why the application crashed, the only thing left is to figure out what caused it?&lt;br /&gt;&lt;br /&gt;We know that background threads execute independently of the main UI thread. That means that the user could be interacting with the application during the time that the thread is doing its work under the covers. Well, what happens if the user hits the “Back” button on the device while the background thread is running and what happens to the Dialog that this thread is supposed to show? Well, if the timing is right the application will most likely crash with the above described error.&lt;br /&gt;&lt;br /&gt;In other words what happens is that the Activity will be going through its destruction when the background thread finishes its work and tries to show a Dialog.&lt;br /&gt;&lt;br /&gt;In this case it is almost certain that this should have been handled by the Virtual Machine. It should have recognized the fact that the Activity is in the process of finishing and not even attempted to show the Dialog. This is an oversight of the Google developers and it will probably be fixed some time in the future, but in the meantime the burden is on us to take care of this.&lt;br /&gt;&lt;br /&gt;The fix to this is pretty simple. Just test if the Activity is going through its finishing phase before displaying the Dialog:&lt;br /&gt;&lt;br /&gt;private Handler myHandler = new Handler() {&lt;br /&gt;  @Override&lt;br /&gt;  public void handleMessage(Message msg) {&lt;br /&gt;    switch (msg.what) {&lt;br /&gt;      case DISPLAY_DLG:&lt;br /&gt;        if (!isFinishing()) {&lt;br /&gt;        showDialog(MY_DIALOG);&lt;br /&gt;        }&lt;br /&gt;      break;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;};&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5673521361234380144?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5673521361234380144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/androidviewwindowmanagerbadtokenexcepti.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5673521361234380144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5673521361234380144'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/androidviewwindowmanagerbadtokenexcepti.html' title='android.view.WindowManager$BadTokenException &amp; Android – Displaying Dialogs From Background Threads'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-7711287058937212155</id><published>2010-11-10T06:35:00.000-08:00</published><updated>2010-11-10T06:39:03.130-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='host'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Host File - Windows</title><content type='html'>The hosts file is a computer file used in an operating system to map hostnames to IP addresses. The hosts file is a plain-text file and is traditionally named hosts.&lt;br /&gt;&lt;br /&gt;The hosts file is one of several system facilities to assist in addressing network nodes in a computer network. It is a common part in a operating system's Internet Protocol (IP) implementation, and serves the function of translating human-friendly hostnames into numeric protocol addresses, called IP addresses, that identify and locate a host in an IP network.&lt;br /&gt;In some operating systems, the host file content is used preferentially over other methods, such as the Domain Name System (DNS), but many systems implement name service switches (.e.g., nsswitch.conf) to provide customization. Unlike the DNS, the hosts file is under the direct control of the local computer's administrator.&lt;br /&gt;&lt;br /&gt;#This is an example of the hosts file&lt;br /&gt;127.0.0.1  localhost loopback&lt;br /&gt;::1        localhost&lt;br /&gt;&lt;br /&gt;path of host file is:&lt;br /&gt;&lt;br /&gt;Windows 95/98/Me c:\windows\hosts&lt;br /&gt;&lt;br /&gt;Windows NT/2000/XP Pro  c:\winnt\system32\drivers\etc\hosts&lt;br /&gt;&lt;br /&gt;Windows XP Home c:\windows\system32\drivers\etc\hosts&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-7711287058937212155?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/7711287058937212155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/host-file-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7711287058937212155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7711287058937212155'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/host-file-windows.html' title='Host File - Windows'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-7181661975752256970</id><published>2010-11-08T02:35:00.000-08:00</published><updated>2010-11-08T02:38:21.210-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activityManager'/><category scheme='http://www.blogger.com/atom/ns#' term='running applications'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='resolveinfo'/><title type='text'>List of Running ApplciationS</title><content type='html'>From the below snippet we can check the list of running applications and check whether your application is in foreground or not.&lt;br /&gt;&lt;br /&gt;ActivityManager actvityManager = (ActivityManager)&lt;br /&gt;this.getSystemService( ACTIVITY_SERVICE );&lt;br /&gt;List&lt;RunningAppProcessInfo&gt; procInfos = actvityManager.getRunningAppProcesses();&lt;br /&gt;&lt;br /&gt;boolean appFound = false;&lt;br /&gt;&lt;br /&gt;for(int i = 0; i &lt; procInfos.size(); i++)&lt;br /&gt;{&lt;br /&gt; if(procInfos.get(i).processName == "com.android.camera")&lt;br /&gt;  appFound = true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (appFound)&lt;br /&gt; Toast.makeText(getApplicationContext(), "Camera App is running!!!!", Toast.LENGTH_LONG).show();&lt;br /&gt;else&lt;br /&gt; Toast.makeText(getApplicationContext(), "Camera App is not running!!!!", Toast.LENGTH_LONG).show();&lt;br /&gt;&lt;br /&gt;the above snippet shows  your camera application is running or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-7181661975752256970?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/7181661975752256970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/list-of-running-applciations.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7181661975752256970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7181661975752256970'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/list-of-running-applciations.html' title='List of Running ApplciationS'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-336334235068380639</id><published>2010-11-07T19:52:00.000-08:00</published><updated>2010-11-07T20:04:25.891-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adb commands'/><category scheme='http://www.blogger.com/atom/ns#' term='performanace'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='monkey'/><category scheme='http://www.blogger.com/atom/ns#' term='basics'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>UI/Application Exerciser Monkey</title><content type='html'>Today i gone through this tutorial from developer site seems to be interesting for UI application performance ,adding basic information on my blog:&lt;br /&gt;&lt;br /&gt;---Basically Monkey is a program that runs on you emulator or Device(Mobile) and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events.&lt;br /&gt;&lt;br /&gt;---You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Description of Monkey Tool:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--The Monkey is a command-line tool that that you can run on any emulator instance or on a device. It sends a pseudo-random stream of user events into the system, which acts as a stress test on the application software you are developing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Categories:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Monkey includes a number of options, but they break down into four primary categories:&lt;br /&gt;1.Basic configuration options, such as setting the number of events to attempt.&lt;br /&gt;2.Operational constraints, such as restricting the test to a single package.&lt;br /&gt;3.Event types and frequencies.&lt;br /&gt;4.Debugging options.&lt;br /&gt;&lt;br /&gt;****When the Monkey runs, it generates events and sends them to the system. It also watches the system under test and looks for three conditions, which it treats specially:&lt;br /&gt;&lt;br /&gt;1.If you have constrained the Monkey to run in one or more specific packages, it watches for attempts to navigate to any other packages, and blocks them.&lt;br /&gt;2.If your application crashes or receives any sort of unhandled exception, the Monkey will stop and report the error.&lt;br /&gt;3.If your application generates an application not responding error, the Monkey will stop and report the error.&lt;br /&gt;&lt;br /&gt;Depending on the verbosity level you have selected, you will also see reports on the progress of the Monkey and the events being generated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Basic Use Steps for Monkey:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;****You can launch the Monkey using a command line on your development machine or from a script. Because the Monkey runs in the emulator/device environment, you must launch it from a shell in that environment. You can do this by prefacing adb shell to each command, or by entering the shell and entering Monkey commands directly.&lt;br /&gt;&lt;br /&gt;The basic syntax is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;$ adb shell monkey [options] &lt;event-count&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With no options specified, the Monkey will launch in a quiet (non-verbose) mode, and will send events to any (and all) packages installed on your target. Here is a more typical command line, which will launch your application and send 500 pseudo-random events to it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;$ adb shell monkey -p your.package.name -v 500&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Command Options Reference&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The below lists all options you can include on the Monkey command line.&lt;br /&gt;&lt;br /&gt;1. --help  : Prints a simple usage guide.&lt;br /&gt;&lt;br /&gt;2. -v          : Each -v on the command line will increment the verbosity level. Level 0 (the default) provides little information beyond startup notification, test completion, and final results. Level 1 provides more details about the test as it runs, such as individual events being sent to your activities. Level 2 provides more detailed setup information such as activities selected or not selected for testing.&lt;br /&gt;&lt;br /&gt;3. -s &lt;seed&gt;  : Seed value for pseudo-random number generator. If you re-run the Monkey with the same seed value, it will generate the same sequence of events.&lt;br /&gt;&lt;br /&gt;4. --throttle &lt;milliseconds&gt; : Inserts a fixed delay between events. You can use this option to slow down the Monkey. If not specified, there is no delay and the events are generated as rapidly as possible.&lt;br /&gt;&lt;br /&gt;5. --wait-dbg  : Stops the Monkey from executing until a debugger is attached to it.&lt;br /&gt;&lt;br /&gt;etc., command for debugging, constraints, events &amp; general commands  refer android developer site for more information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-336334235068380639?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/336334235068380639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/uiapplication-exerciser-monkey.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/336334235068380639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/336334235068380639'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/uiapplication-exerciser-monkey.html' title='UI/Application Exerciser Monkey'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-7963356796958831962</id><published>2010-11-05T20:55:00.000-07:00</published><updated>2010-11-05T21:05:07.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='device administration application example'/><title type='text'>Developing a Device Administration Application</title><content type='html'>System administrators can use the Device Administration API to write an application that enforces remote/local device security policy enforcement. This section summarizes the steps involved in creating a device administration application.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Creating the manifest:&lt;/span&gt;&lt;br /&gt;To use the Device Administration API, the application's manifest must include the following:&lt;br /&gt;&lt;br /&gt;A subclass of DeviceAdminReceiver that includes the following:&lt;br /&gt;   --The BIND_DEVICE_ADMIN permission.&lt;br /&gt;   --The ability to respond to the ACTION_DEVICE_ADMIN_ENABLED intent, expressed in the manifest as an intent filter.&lt;br /&gt;&lt;br /&gt;A declaration of security policies used in metadata.&lt;br /&gt;&lt;br /&gt;Here is an snippet for the Device Administration sample manifest:&lt;br /&gt;&lt;br /&gt;&lt;activity android:name=".TestDeviceAdmin$Controller"&lt;br /&gt;          android:label="@string/activity_sample_device_admin"&gt;&lt;br /&gt;    &lt;intent-filter&gt;&lt;br /&gt;        &lt;action android:name="android.intent.action.MAIN" /&gt;&lt;br /&gt;        &lt;category android:name="android.intent.category.UR_CHOICE" /&gt;&lt;br /&gt;    &lt;/intent-filter&gt;&lt;br /&gt;&lt;/activity&gt;&lt;br /&gt;&lt;br /&gt;&lt;receiver android:name=".DeviceAdminReciever"&lt;br /&gt;          android:label="@string/sample_device_admin"&lt;br /&gt;          android:description="@string/device_admin_description"&lt;br /&gt;          android:permission="android.permission.BIND_DEVICE_ADMIN"&gt;&lt;br /&gt;    &lt;meta-data android:name="android.app.device_admin"&lt;br /&gt;               android:resource="@xml/device_admin_sample" /&gt;&lt;br /&gt;    &lt;intent-filter&gt;&lt;br /&gt;        &lt;action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /&gt;&lt;br /&gt;    &lt;/intent-filter&gt;&lt;br /&gt;&lt;/receiver&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that:&lt;br /&gt;&lt;br /&gt;The activity in the sample application is an Activity subclass called Controller. The syntax ".app.DeviceAdminSample$Controller" indicates that Controller is an inner class that is nested inside the DeviceAdminSample class. Note that an Activity does not need to be an inner class; it just is in this example.&lt;br /&gt;&lt;br /&gt;The following attributes refer to string resources that for the sample application reside in ApiDemos/res/values/strings.xml. For more information about resources, see Application Resources.&lt;br /&gt;&lt;br /&gt;android:label="@string/activity_sample_device_admin" refers to the user-readable label for the activity.&lt;br /&gt;&lt;br /&gt;android:label="@string/sample_device_admin" refers to the user-readable label for the permission.&lt;br /&gt;&lt;br /&gt;android:description="@string/sample_device_admin_description" refers to the user-readable description of the permission. A descripton is typically longer and more informative than a label.&lt;br /&gt;&lt;br /&gt;android:permission="android.permission.BIND_DEVICE_ADMIN" is a permission that a DeviceAdminReceiver subclass must have, to ensure that only the system can interact with the receiver (no application can be granted this permission). This prevents other applications from abusing your device admin app.&lt;br /&gt;&lt;br /&gt;android.app.action.DEVICE_ADMIN_ENABLED is the the primary action that a DeviceAdminReceiver subclass must handle to be allowed to manage a device. This is set to the receiver when the user enables the device admin app. Your code typically handles this in onEnabled(). To be supported, the receiver must also require the BIND_DEVICE_ADMIN permission so that other applications cannot abuse it.&lt;br /&gt;&lt;br /&gt;When a user enables the device admin application, that gives the receiver permission to perform actions in response to the broadcast of particular system events. When suitable event arises, the application can impose a policy. For example, if the user attempts to set a new password that doesn't meet the policy requirements, the application can prompt the user to pick a different password that does meet the requirements.&lt;br /&gt;&lt;br /&gt;android:resource="@xml/device_admin_sample" declares the security policies used in metadata. The metadata provides additional information specific to the device administrator, as parsed by the DeviceAdminInfo class. Here are the contents of device_admin_sample.xml:&lt;br /&gt;&lt;br /&gt;&lt;device-admin xmlns:android="http://schemas.android.com/apk/res/android"&gt;&lt;br /&gt;  &lt;uses-policies&gt;&lt;br /&gt;    &lt;limit-password /&gt;&lt;br /&gt;    &lt;watch-login /&gt;&lt;br /&gt;    &lt;reset-password /&gt;&lt;br /&gt;    &lt;force-lock /&gt;&lt;br /&gt;    &lt;wipe-data /&gt;&lt;br /&gt;  &lt;/uses-policies&gt;&lt;br /&gt;&lt;/device-admin&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Implementing the code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Device Administration API includes the following classes:&lt;br /&gt;&lt;br /&gt;DeviceAdminReceiver&lt;br /&gt;&lt;br /&gt;Base class for implementing a device administration component. This class provides a convenience for interpreting the raw intent actions that are sent by the system. Your Device Administration application must include a DeviceAdminReceiver subclass.&lt;br /&gt;DevicePolicyManager&lt;br /&gt;&lt;br /&gt;A class for managing policies enforced on a device. Most clients of this class must have published a DeviceAdminReceiver that the user has currently enabled. The DevicePolicyManager manages policies for one or more DeviceAdminReceiver instances&lt;br /&gt;DeviceAdminInfo&lt;br /&gt;&lt;br /&gt;This class is used to specify metadata for a device administrator component.&lt;br /&gt;These classes provide the foundation for a fully functional device administration application. The rest of this section describes how you use the DeviceAdminReceiver and DevicePolicyManager APIs to write a device admin application.&lt;br /&gt;&lt;br /&gt;Subclassing DeviceAdminReceiver&lt;br /&gt;&lt;br /&gt;To create a device admin application, you must subclass DeviceAdminReceiver. The DeviceAdminReceiver class consists of a series of callbacks that are triggered when particular events occur.&lt;br /&gt;&lt;br /&gt;In its DeviceAdminReceiver subclass, the sample application simply displays a Toast notification in response to particular events. For example:&lt;br /&gt;&lt;br /&gt;public class DeviceAdminSample extends DeviceAdminReceiver {&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;    @Override&lt;br /&gt;    public void onEnabled(Context context, Intent intent) {&lt;br /&gt;        showToast(context, "Sample Device Admin: enabled");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public CharSequence onDisableRequested(Context context, Intent intent) {&lt;br /&gt;        return "This is an optional message to warn the user about disabling.";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onDisabled(Context context, Intent intent) {&lt;br /&gt;        showToast(context, "Sample Device Admin: disabled");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onPasswordChanged(Context context, Intent intent) {&lt;br /&gt;        showToast(context, "Sample Device Admin: pw changed");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    void showToast(Context context, CharSequence msg) {&lt;br /&gt;        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();&lt;br /&gt;    }&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Enabling the application&lt;br /&gt;&lt;br /&gt;One of the major events a device admin application has to handle is the user enabling the application. The user must explicitly enable the application for the policies to be enforced. If the user chooses not to enable the application it will still be present on the device, but its policies will not be enforced, and the user will not get any of the application's benefits.&lt;br /&gt;&lt;br /&gt;The process of enabling the application begins when the user performs an action that triggers the ACTION_ADD_DEVICE_ADMIN intent. In the sample application, this happens when the user clicks the Enable Admin button&lt;br /&gt;&lt;br /&gt;for Reference's &lt;a href="http://developer.android.com/guide/topics/admin/device-admin.html"&gt;Android Device Administration code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-7963356796958831962?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/7963356796958831962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/developing-device-administration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7963356796958831962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7963356796958831962'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/developing-device-administration.html' title='Developing a Device Administration Application'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-2128841248343540605</id><published>2010-11-05T20:41:00.000-07:00</published><updated>2010-11-05T20:53:32.567-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android device administration'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise features in android'/><title type='text'>Device Administration - New Feature Supported from Froyo</title><content type='html'>Android 2.2(FROYO) introduces support for enterprise applications by offering the Android Device Administration API.&lt;br /&gt;&lt;br /&gt;--Device Administration API provides device administration features at the system level.&lt;br /&gt;&lt;br /&gt;--These APIs allow you to create security-aware applications that are useful in enterprise settings, in which IT professionals require rich control over employee devices.&lt;br /&gt;&lt;br /&gt;***For example, the built-in Android Email application has leveraged the new APIs to improve Exchange support. Through the Email application, Exchange administrators can enforce password policies — including alphanumeric passwords or numeric PINs — across devices.&lt;br /&gt;&lt;br /&gt;**Administrators can also remotely wipe (that is, restore factory defaults on) lost or stolen handsets.&lt;br /&gt;&lt;br /&gt;**Exchange users can sync their email and calendar data.&lt;br /&gt;&lt;br /&gt;--This above information is intended for developers who want to develop enterprise solutions for Android-powered devices. It discusses the various features provided by the Device Administration API to provide stronger security for employee devices that are powered by Android.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Device Administration API Overview :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here are examples of the types of applications that might use the Device Administration API:&lt;br /&gt;&lt;br /&gt;--Email clients.&lt;br /&gt;--Security applications that do remote wipe.&lt;br /&gt;--Device management services and applications.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How does it work?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You use the Device Administration API to write device admin applications that users install on their devices. The device admin application enforces the desired policies. Here's how it works:&lt;br /&gt;&lt;br /&gt;A system administrator writes a device admin application that enforces remote/local device security policies. These policies could be hard-coded into the app, or the application could dynamically fetch policies from a third-party server.&lt;br /&gt;The application is installed on users' devices. Android does not currently have an automated provisioning solution. Some of the ways a sysadmin might distribute the application to users are as follows:&lt;br /&gt;&lt;br /&gt;Android Market.&lt;br /&gt;&lt;br /&gt;Enabling non-market installation.&lt;br /&gt;&lt;br /&gt;Distributing the application through other means, such as email or websites.&lt;br /&gt;&lt;br /&gt;The system prompts the user to enable the device admin application. How and when this happens depends on how the application is implemented.&lt;br /&gt;Once users enable the device admin application, they are subject to its policies. Complying with those policies typically confers benefits, such as access to sensitive systems and data.&lt;br /&gt;&lt;br /&gt;If users do not enable the device admin app, it remains on the device, but in an inactive state. Users will not be subject to its policies, and they will conversely not get any of the application's benefits—for example, they may not be able to sync data.&lt;br /&gt;&lt;br /&gt;If a user fails to comply with the policies (for example, if a user sets a password that violates the guidelines), it is up to the application to decide how to handle this. However, typically this will result in the user not being able to sync data.&lt;br /&gt;&lt;br /&gt;If a device attempts to connect to a server that requires policies not supported in the Device Administration API, the connection will not be allowed. The Device Administration API does not currently allow partial provisioning. In other words, if a device (for example, a legacy device) does not support all of the stated policies, there is no way to allow the device to connect.&lt;br /&gt;&lt;br /&gt;If a device contains multiple enabled admin applications, the strictest policy is enforced. There is no way to target a particular admin application.&lt;br /&gt;&lt;br /&gt;To uninstall an existing device admin application, users need to first unregister the application as an administrator.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Policies&lt;/span&gt;&lt;br /&gt;In an enterprise setting, it's often the case that employee devices must adhere to a strict set of policies that govern the use of the device. The Device Administration API supports the policies listed in Table 1. Note that the Device Administration API currently only supports passwords for screen lock:&lt;br /&gt;&lt;br /&gt;Table 1. Policies supported by the Device Administration API.&lt;br /&gt;Below explanation with Policy:Description&lt;br /&gt;Password enabled         Requires that devices ask for PIN or passwords.&lt;br /&gt;&lt;br /&gt;Minimum password length   :      Set the required number of characters for the password.       For example, you can require PIN or passwords to have at least six characters.                 &lt;br /&gt;&lt;br /&gt;Alphanumeric password required  : Requires that passwords have a combination of letters and numbers. They may include symbolic characters.&lt;br /&gt;&lt;br /&gt;Maximum failed password attempts : Specifies how many times a user can enter the wrong password before the device wipes its data. The Device Administration API also allows administrators to remotely reset the device to factory defaults. This secures data in case the device is lost or stolen.&lt;br /&gt;&lt;br /&gt;Maximum inactivity time lock :     Sets the length of time since the user last touched the screen or pressed a button before the device locks the screen. When this happens, users need to enter their PIN or passwords again before they can use their devices and access data. The value can be between 1 and 60 minutes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Other features&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In addition to supporting the policies listed in the above table, the Device Administration API lets you do the following:&lt;br /&gt;&lt;br /&gt;Prompt user to set a new password.&lt;br /&gt;Lock device immediately.&lt;br /&gt;Wipe the device's data (that is, restore the device to its factory defaults).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-2128841248343540605?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/2128841248343540605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/device-administration-new-feature.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/2128841248343540605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/2128841248343540605'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/device-administration-new-feature.html' title='Device Administration - New Feature Supported from Froyo'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3296974914323250209</id><published>2010-11-05T01:39:00.000-07:00</published><updated>2010-11-05T01:42:35.658-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='convert string to hex'/><title type='text'>Code Snippet to Convert String to Hex-Decimal</title><content type='html'>A Small Code Snippet to Convert String to Hex-Decimal&lt;br /&gt;&lt;br /&gt;class StringtoHexConvertion {&lt;br /&gt;&lt;br /&gt;   public static void main(String args[]){&lt;br /&gt;&lt;br /&gt;   try{&lt;br /&gt;       String imputString = "000000000002";&lt;br /&gt;       byte[] bytes = imputString .getBytes("US-ASCII");&lt;br /&gt;       &lt;br /&gt;       String str1 = "";&lt;br /&gt;      for(int i=0;i&lt;br /&gt;           System.out.println("byte value =  "+ bytes[i]);&lt;br /&gt;                    str1 = str1 + Integer.toHexString(bytes[i]);&lt;br /&gt;     }&lt;br /&gt;    System.out.println(" final String = "+ str1); &lt;br /&gt;   }&lt;br /&gt;  catch(Exception e){}&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;It might be helpful for some sceneries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3296974914323250209?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3296974914323250209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/code-snippet-to-convert-string-to-hex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3296974914323250209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3296974914323250209'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/code-snippet-to-convert-string-to-hex.html' title='Code Snippet to Convert String to Hex-Decimal'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8447714153154950542</id><published>2010-11-05T01:04:00.000-07:00</published><updated>2010-11-05T01:06:20.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sdcard'/><category scheme='http://www.blogger.com/atom/ns#' term='bootsequesnce'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>SD Card Boot Sequence on Android Platform</title><content type='html'>When you are porting Android, one important feature to check is SD card mount. &lt;br /&gt;&lt;br /&gt;Needless to say this feature is needed for many functions to operate in correctly. &lt;br /&gt;&lt;br /&gt;Couple of such examples are Bluetooth OPP and FTP profiles.&lt;br /&gt;&lt;br /&gt;SD card boot up sequence is as follows :&lt;br /&gt;&lt;br /&gt;mmc/sd driver recognises the inserted card, makes device object for every partitions &lt;br /&gt;&lt;br /&gt;with unique combination of MAJOR:MINOR numbers and generate uevent.&lt;br /&gt;&lt;br /&gt;uevent comes to user-level via kernel socket NETLINK_KOBJECT_UEVENT.&lt;br /&gt;&lt;br /&gt;vold handles this uevent in uevent.c::handle_block_event().&lt;br /&gt;&lt;br /&gt;vold reads boot sector to determine, how many partitions remains on storage.&lt;br /&gt;&lt;br /&gt;If all partitions are found, vold will start "mount" procedure.&lt;br /&gt;&lt;br /&gt;If mount is successfully finished, vold sends "volume_mounted:/sdcard" to &lt;br /&gt;&lt;br /&gt;com.android.server.MountListener.&lt;br /&gt;&lt;br /&gt;com.android.server.MountListener dispatches message to &lt;br /&gt;&lt;br /&gt;com.android.server.MountService by handleEvent() method.&lt;br /&gt;&lt;br /&gt;com.android.server.MountService provides to framework the logical interpretation of &lt;br /&gt;&lt;br /&gt;vold actions such as update icon notification and forwards command from user to vold.&lt;br /&gt;&lt;br /&gt;So, in our case MountService::notifyMediaMounted() will generate &lt;br /&gt;&lt;br /&gt;Intent.ACTION_MEDIA_MOUNTED.&lt;br /&gt;&lt;br /&gt;This intent will start com.android.providers.media.MediaScanner which will start &lt;br /&gt;&lt;br /&gt;searching the media content and makes the database. Parallely &lt;br /&gt;&lt;br /&gt;com.android.settings.deviceinfo.Memory will update memory status.&lt;br /&gt;&lt;br /&gt;             Some important files to remember for SD card boot sequence are mmc.c, &lt;br /&gt;&lt;br /&gt;ums.c vold.c, voldmgr.c, uevent.c. These files will be useful in debugging SD card &lt;br /&gt;&lt;br /&gt;boot up sequence. The configuration file of SD card is vold.conf and is present in &lt;br /&gt;&lt;br /&gt;/etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8447714153154950542?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8447714153154950542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/sd-card-boot-sequence-on-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8447714153154950542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8447714153154950542'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/sd-card-boot-sequence-on-android.html' title='SD Card Boot Sequence on Android Platform'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8353181095339025984</id><published>2010-11-05T00:57:00.000-07:00</published><updated>2010-11-05T00:58:55.433-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='name'/><category scheme='http://www.blogger.com/atom/ns#' term='taskbar'/><title type='text'>Trick to show Your Name after time in Taskbar</title><content type='html'>I am interested  to share a funny trick with time display in the taskbar....Let us see.....&lt;br /&gt;&lt;br /&gt;Trick to show ur Name after time in taskbar....&lt;br /&gt;&lt;br /&gt;Here is a trick to add up ur name in place of AM and PM beside time and make urself to feel proud among ur group of friends...&lt;br /&gt;Its simple....&lt;br /&gt;&lt;br /&gt;Start -&gt; Control Panel -&gt; Regional and Language option -&gt; Customize (beside English US) -&gt; Go to TIME tab -&gt; change AM or PM symbols from AM or PM to ur name or the word u like to display-&gt; Apply -&gt; OK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8353181095339025984?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8353181095339025984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/trick-to-show-your-name-after-time-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8353181095339025984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8353181095339025984'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/trick-to-show-your-name-after-time-in.html' title='Trick to show Your Name after time in Taskbar'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-6837926749077473529</id><published>2010-11-05T00:54:00.001-07:00</published><updated>2010-11-05T00:54:28.001-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hard drives'/><category scheme='http://www.blogger.com/atom/ns#' term='hide'/><title type='text'>How to Hide the drives?</title><content type='html'>How to Hide the drives(c:,d:,e:,a:...etc)&lt;br /&gt;How to Hide the drives(c:,d:,e:,a:...etc)&lt;br /&gt;This is a great trick you can play on your friends. To disable the display of local or networked drives when you click My Computer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.Go to start-&gt;run.Type regedit.Now go to:&lt;br /&gt;&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer&lt;br /&gt;&lt;br /&gt;Now in the right pane create a new DWORD item and name it NoDrives(it is case sensitive). Now modify it's value and set it to 3FFFFFF (Hexadecimal) .Now restart your computer. So, now when you click on My Computer, no drives will be shown(all gone...). To enable display of drives in My Computer, simply delete this DWORD item that you created.Again restart your computer.You can now see all the drives again. Magic.......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-6837926749077473529?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/6837926749077473529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/how-to-hide-drives.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/6837926749077473529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/6837926749077473529'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/how-to-hide-drives.html' title='How to Hide the drives?'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8531303633009551741</id><published>2010-11-05T00:52:00.000-07:00</published><updated>2010-11-05T00:53:13.475-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='ways'/><category scheme='http://www.blogger.com/atom/ns#' term='shutdown'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><title type='text'>Different Ways to Shutdown your Personal Computer</title><content type='html'>There are so many different ways to turn off your Windows XP computer, let's look at some of them:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. The standard approach - click the Start Button with your mouse, then select the Turn Off menu and finally click the Turn Off icon on the Turn Off computer dialog. blink.gif&lt;br /&gt;&lt;br /&gt;2. Press Ctrl+Esc key or the Win key and press u two times - the fastest approach.&lt;br /&gt;&lt;br /&gt;3. Get the Shutdown utility from Download.com - it add the shut down shortcuts for you. Else create them yourself using approach 4.&lt;br /&gt;&lt;br /&gt;4. Create a shutdown shortcut on your desktop. Right click on the desktop, choose New Shortcut and type shutdown -s -t 00 in the area where you are asked to specify the location of the program file. Now you can just double click this icon to turn off the computer. The best location would be your quick launch bar.&lt;br /&gt;&lt;br /&gt;5. Press the Win key + R key to open the run window. Type shutdown -s -t 00. [s means shutdown while t means the duration after which you want to initiate the shutdown process].&lt;br /&gt;&lt;br /&gt;If some open processes or application won't let you turn off, append a -f switch to force a shut down by closing all active processes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Win+M to minimize all windows and then Alt+F4 to bring the Turn Off computer dialog.&lt;br /&gt;&lt;br /&gt;7. Open Windows Task manager (by right clicking the Windows Task bar or Alt+Ctrl+Del) and choose Shut down from the menu. Useful when the Windows are not responding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8531303633009551741?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8531303633009551741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/different-ways-to-shutdown-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8531303633009551741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8531303633009551741'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/different-ways-to-shutdown-your.html' title='Different Ways to Shutdown your Personal Computer'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1995336680839362529</id><published>2010-11-05T00:45:00.000-07:00</published><updated>2010-11-05T00:49:01.424-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='danger'/><category scheme='http://www.blogger.com/atom/ns#' term='wtc'/><category scheme='http://www.blogger.com/atom/ns#' term='flight'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><title type='text'>World Trade Center Trick from NotePad:</title><content type='html'>Trick to find the World Trace Center crash Logic.&lt;br /&gt;&lt;br /&gt;1.Open NotePad, type World Trade Center crash flight number Q33N.&lt;br /&gt;&lt;br /&gt;2. Increase your font size to 72.&lt;br /&gt;&lt;br /&gt;3. change the font type to Wingdings.&lt;br /&gt;&lt;br /&gt;and check the result. &lt;br /&gt;&lt;br /&gt;How was the result?????&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1995336680839362529?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1995336680839362529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/world-trade-center-trick-from-not-pad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1995336680839362529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1995336680839362529'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/11/world-trade-center-trick-from-not-pad.html' title='World Trade Center Trick from NotePad:'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-7393327222139286436</id><published>2010-10-28T09:56:00.000-07:00</published><updated>2010-10-28T10:04:16.861-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android maps location manager'/><category scheme='http://www.blogger.com/atom/ns#' term='android.location'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Location Based Services (LBS) on Android :</title><content type='html'>Location and maps-based applications are compelling for mobile device users.&lt;br /&gt;&lt;br /&gt;You can build application by android.location packages and com.google.android.maps.MapView which is sub class of ViewGroup in Andorid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Location Services :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1.Android gives your applications access to the location services supported by the device through the classes in the android.location package.&lt;br /&gt;&lt;br /&gt;2.The central component of the location framework is the LocationManager system service, which provides APIs to determine location and bearing of the underlying device (if available).&lt;br /&gt;&lt;br /&gt;         You do not instantiate a LocationManager directly. Rather, you request an instance from the system by calling &lt;span style="font-weight:bold;"&gt;getSystemService(Context.LOCATION_SERVICE)&lt;/span&gt;. The method returns a handle to a new &lt;span style="font-weight:bold;"&gt;LocationManager &lt;/span&gt;instance.&lt;br /&gt;&lt;br /&gt;Once your application has a LocationManager, your application is able to do three things:&lt;br /&gt;&lt;br /&gt;1.we can Query for the list of all LocationProviders for the last known user location.&lt;br /&gt;&lt;br /&gt;2.Register/unregister for periodic updates of the user's current location from a location provider .&lt;br /&gt;&lt;br /&gt;3.Register/unregister for a given Intent to be fired if the device comes within a given proximity (specified by radius in meters) of a given lat/long.&lt;br /&gt;&lt;br /&gt;Next Post we will see this location services with Examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-7393327222139286436?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/7393327222139286436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/location-based-services-lbs-on-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7393327222139286436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7393327222139286436'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/location-based-services-lbs-on-android.html' title='Location Based Services (LBS) on Android :'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3904341499043466180</id><published>2010-10-23T00:26:00.001-07:00</published><updated>2010-10-23T00:26:48.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Pollution: Boot-Time Services'/><title type='text'>Code Pollution: Boot-Time Services</title><content type='html'>In the Code Pollution series, I'll be writing about topics where a coding anti-pattern may work tactically for an individual application, but strategically will be bad for Android as a whole, just as pollution may benefit one firm while harming many others.&lt;br /&gt;&lt;br /&gt;Many readers have, at one point in time or another, had a Windows PC that got overloaded with "cruft" and took forever and a day to boot up. Or, even if it would boot normally, it would be slow as a dog for the first minute or two after the desktop showed up.&lt;br /&gt;&lt;br /&gt;While it would be fun and entertaining to bash Windows for this, in reality, it was probably third party applications causing a chunk of the problem. Lots of programs think that they just have to do something when the PC starts up, and too many of them bring the boot process to a halt.&lt;br /&gt;&lt;br /&gt;The good news is that, for most people, Android is plenty stable enough not to require constant reboots. The bad news is that Android devices may still need to be rebooted from time to time, to process firmware upgrades, to recover from a dead battery, and the like.&lt;br /&gt;&lt;br /&gt;One of the things the core Android team feared was too many applications asking to do something at boot time, via the BOOT_COMPLETED broadcast Intent, and causing the boot process to become horribly slow. That is why you need the REQUEST_BOOT_COMPLETED permission to receive BOOT_COMPLETED broadcasts -- the theory being that users who have had problems with slow boots might be less inclined to install other programs that demand boot-time access.&lt;br /&gt;&lt;br /&gt;Still, though, it is up to us as developers to try to make the boot process as quick and painless as possible. Here are some ways you can help:&lt;br /&gt;&lt;br /&gt;Do not request BOOT_COMPLETED broadcasts unnecessarily. For example, some developers may think it would be cool to steal three or four seconds of processing time at boot to do some sort of initialization, rather than have to deal with that work when their app is started. Tactically, this will improve responsiveness of that one application...at the cost of harming all applications on a reboot.&lt;br /&gt;Do whatever you need to do quickly. If BOOT_COMPLETED is unavoidable, try to get in and out in few dozen milliseconds, not a few seconds.&lt;br /&gt;Consider whether you can wait a bit. Many times, apps do not need to start up right at boot time, but rather sometime after a reboot. Unfortunately, there is no built-in way to ask for a "early, but not right away" broadcast...unless you set one up yourself. Consider whether you could use AlarmManager to do a one-shot alarm to fire your real boot-time code a minute or two after the boot is over. You only lose a minute, and it clears out the rest of the boot processing, and perhaps some initial user actions, before your code needs to join the fray.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3904341499043466180?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3904341499043466180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/code-pollution-boot-time-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3904341499043466180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3904341499043466180'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/code-pollution-boot-time-services.html' title='Code Pollution: Boot-Time Services'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-6168464770916627809</id><published>2010-10-02T06:52:00.000-07:00</published><updated>2010-10-02T06:55:53.690-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='secure'/><category scheme='http://www.blogger.com/atom/ns#' term='lvl'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Securing Android LVL Applications</title><content type='html'>The &lt;a href="http://developer.android.com/guide/publishing/licensing.html"&gt;Android Market licensing service&lt;/a&gt; is a powerful tool for protecting your applications against unauthorized use. The License Verification Library (LVL) is a key component. A determined attacker who’s willing to disassemble and reassemble code can eventually hack around the service; but application developers can make the hackers’ task immensely more difficult, to the point where it may simply not be worth their time.&lt;br /&gt;&lt;br /&gt;Out of the box, the LVL protects against casual piracy; users who try to copy APKs directly from one device to another without purchasing the application. Here are some techniques to make things hard, even for technically skilled attackers who attempt to decompile your application and remove or disable LVL-related code.&lt;br /&gt;&lt;br /&gt;1.You can obfuscate your application to make it difficult to reverse-engineer.&lt;br /&gt;&lt;br /&gt;2.You can modify the licensing library itself to make it difficult to apply common cracking techniques.&lt;br /&gt;&lt;br /&gt;3.You can make your application tamper-resistant.&lt;br /&gt;&lt;br /&gt;4.You can offload license validation to a trusted server.&lt;br /&gt;&lt;br /&gt;This can and should be done differently by each app developer. A guiding principle in the design of the licensing service is that attackers must be forced to crack each application individually, and unfortunately no client-side code can be made 100% secure. As a result, we depend on developers introducing additional complexity and heterogeneity into the license check code — something which requires human ingenuity and and a detailed knowledge of the application the license library is being integrated into.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Technique: Code Obfuscation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first line of defense in your application should be code obfuscation. Code obfuscation will not protect against automated attacks, and it doesn’t alter the flow of your program. However, it does make it more difficult for attackers to write the initial attack for an application, by removing symbols that would quickly reveal the original structure of a compiled application. As such, we strongly recommend using code obfuscation in all LVL installations.&lt;br /&gt;&lt;br /&gt;To understand what an obfuscator does, consider the build process for your application: Your application is compiled and converted into .dex files and packaged in an APK for distribution on devices. The bytecode contains references to the original code — packages, classes, methods, and fields all retain their original (human readable) names in the compiled code. Attackers use this information to help reverse-engineer your program, and ultimately disable the license check.&lt;br /&gt;&lt;br /&gt;Obfuscators replace these names with short, machine generated alternatives. Rather than seeing a call to dontAllow(), an attacker would see a call to a(). This makes it more difficult to intuit the purpose of these functions without access to the original source code.&lt;br /&gt;&lt;br /&gt;There are a number of commercial and open-source obfuscators available for Java that will work with Android. We have had good experience with ProGuard, but we encourage you to explore a range of obfuscators to find the solution that works best for you.&lt;br /&gt;&lt;br /&gt;We will be publishing a separate article soon that provides detailed advice on working with ProGuard. Until then, please refer to the ProGuard documentation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Technique: Modifying the license library&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The second line of defense against attack from crackers is to modify the license verification library in such a way that it’s difficult for an attacker to modify the disassembled code and get a positive license check as result.&lt;br /&gt;&lt;br /&gt;This actually provides protection against two different types of attack: it protects against attackers trying to crack your application, but it also prevents attacks designed to target other applications (or even the stock LVL distribution itself) from being easily ported over to your application. The goal should be to both increase the complexity of your application’s bytecode and make your application’s LVL implementation unique.&lt;br /&gt;&lt;br /&gt;When modifying the license library, there are three areas that you will want to focus on:&lt;br /&gt;&lt;br /&gt;The core licensing library logic.&lt;br /&gt;The entry/exit points of the licensing library.&lt;br /&gt;How your application invokes the licensing library and handles the license response.&lt;br /&gt;In the case of the core licensing library, you’ll primarily want to focus on two classes which comprise the core of the LVL logic: LicenseChecker and LicenseValidator.&lt;br /&gt;&lt;br /&gt;Quite simply, your goal is to modify these two classes as much as possible, in any way possible, while still retaining the original function of the application. Here are some ideas to get you started, but you’re encouraged to be creative:&lt;br /&gt;&lt;br /&gt;Replace switch statements with if statements.&lt;br /&gt;Use XOR or hash functions to derive new values for any constants used and check for those instead.&lt;br /&gt;Remove unused code. For instance, if you’re sure you won’t need swappable policies, remove the Policy interface and implement the policy verification inline with the rest of LicenseValidator.&lt;br /&gt;Move the entirety of the LVL into your own application’s package.&lt;br /&gt;Spawn additional threads to handle different parts of license validation.&lt;br /&gt;Replace functions with inline code where possible.&lt;br /&gt;&lt;br /&gt;For example, consider the following function from LicenseValidator:&lt;br /&gt;&lt;br /&gt;public void verify(PublicKey publicKey, int responseCode, String signedData, String signature) {&lt;br /&gt;    // ... Response validation code omitted for brevity ...&lt;br /&gt;    switch (responseCode) {&lt;br /&gt;        // In Java bytecode, LICENSED will be converted to the constant 0x0&lt;br /&gt;        case LICENSED:&lt;br /&gt;        case LICENSED_OLD_KEY:&lt;br /&gt;            LicenseResponse limiterResponse = mDeviceLimiter.isDeviceAllowed(userId);&lt;br /&gt;            handleResponse(limiterResponse, data);&lt;br /&gt;            break;&lt;br /&gt;        // NOT_LICENSED will be converted to the constant 0x1&lt;br /&gt;        case NOT_LICENSED:&lt;br /&gt;            handleResponse(LicenseResponse.NOT_LICENSED, data);&lt;br /&gt;            break;&lt;br /&gt;        // ... Extra response codes also removed for brevity ...&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this example, an attacker might try to swap the code belonging to the LICENSED and NOT_LICENSED cases, so that an unlicensed user will be treated as licensed. The integer values for LICENSED (0x0) and NOT_LICENSED (0x1) will be known to an attacker by studying the LVL source, so even obfuscation makes it very easy to locate where this check is performed in your application’s bytecode.&lt;br /&gt;&lt;br /&gt;To make this more difficult, consider the following modification:&lt;br /&gt;&lt;br /&gt;public void verify(PublicKey publicKey, int responseCode, String signedData, String signature) {&lt;br /&gt;       // ... Response validation code omitted for brevity …&lt;br /&gt;        &lt;br /&gt;        // Compute a derivative version of the response code&lt;br /&gt;        // Ideally, this should be placed as far from the responseCode switch as possible,&lt;br /&gt;        // to prevent attackers from noticing the call to the CRC32 library, which would be&lt;br /&gt;        // a strong hint as to what we're done here. If you can add additional transformations&lt;br /&gt;        // elsewhere in before this value is used, that's even better.&lt;br /&gt;        java.util.zip.CRC32 crc32 = new java.util.zip.CRC32();&lt;br /&gt;        crc32.update(responseCode);&lt;br /&gt;        int transformedResponseCode = crc32.getValue();&lt;br /&gt;&lt;br /&gt;        // ... put unrelated application code here ...&lt;br /&gt;        // crc32(LICENSED) == 3523407757&lt;br /&gt;        if (transformedResponse == 3523407757) {&lt;br /&gt;            LicenseResponse limiterResponse = mDeviceLimiter.isDeviceAllowed(userId);&lt;br /&gt;            handleResponse(limiterResponse, data);&lt;br /&gt;        }&lt;br /&gt;        // ... put unrelated application code here ...&lt;br /&gt;        // crc32(LICENSED_OLD_KEY) == 1007455905&lt;br /&gt;        if (transformedResponseCode == 1007455905) {&lt;br /&gt;            LicenseResponse limiterResponse = mDeviceLimiter.isDeviceAllowed(userId);&lt;br /&gt;            handleResponse(limiterResponse, data);&lt;br /&gt;        }&lt;br /&gt;        // ... put unrelated application code here ...&lt;br /&gt;        // crc32(NOT_LICENSED) == 2768625435&lt;br /&gt;        if (transformedResponseCode == 2768625435):&lt;br /&gt;            userIsntLicensed();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;In this example, we’ve added additional code to transform the license response code into a different value. We’ve also removed the switch block, allowing us to inject unrelated application code between the three license response checks. (Remember: The goal is to make your application’s LVL implementation unique. Do not copy the code above verbatim — come up with your own approach.)&lt;br /&gt;&lt;br /&gt;For the entry/exit points, be aware that attackers may try to write a counterfeit version of the LVL that implements the same public interface, then try to swap out the relevant classes in your application. To prevent this, consider adding additional arguments to the LicenseChecker constructor, as well as allow() and dontAllow() in the LicenseCheckerCallback. For example, you could pass in a nonce (a unique value) to LicenseChecker that must also be present when calling allow().&lt;br /&gt;&lt;br /&gt;Note: Renaming allow() and dontAllow() won’t make a difference, assuming that you’re using an obfuscator. The obfuscator will automatically rename these functions for you.&lt;br /&gt;&lt;br /&gt;Be aware that attackers might try and attack the calls in your application to the LVL. For example, if you display a dialogue on license failure with an “Exit” button, consider what would happen if an attacker were to comment out the line of code that displayed that window. If the user never pushes the “Exit” button in the dialog (which is no not being displayed) will your application still terminate? To prevent this, consider invoking a different Activity to handle informing a user that their license is invalid, and immediately terminating the original Activity; add additional finish() statements to other parts of your code that get will get executed in case the original one gets disabled; or set a timer that will cause your application to be terminated after a timeout. It’s also a good idea to defer the license check until your application has been running a few minutes, since attackers will be expecting the license check to occur during your application’s launch.&lt;br /&gt;&lt;br /&gt;Finally, be aware that certain methods cannot be obfuscated, even when using a tool such as ProGuard. As a key example, onCreate() cannot be renamed, since it needs to remain callable by the Android system. Avoid putting license check code in these methods, since attackers will be looking for the LVL there.&lt;br /&gt;&lt;br /&gt;Technique: Make your application tamper-resistant&lt;br /&gt;&lt;br /&gt;In order for an attacker to remove the LVL from your code, they have to modify your code. Unless done precisely, this can be detected by your code. There are a few approaches you can use here.&lt;br /&gt;&lt;br /&gt;The most obvious mechanism is to use a lightweight hash function, such as CRC32, and build a hash of your application’s code. You can then compare this checksum with a known good value. You can find the path of your application’s files by calling context.GetApplicationInfo() — just be sure not to compute a checksum of the file that contains your checksum! (Consider storing this information on a third-party server.)&lt;br /&gt;&lt;br /&gt;[In a late edit, we removed a suggestion that you use a check that relies on GetInstallerPackageName when our of our senior engineers pointed out that this is undocumented, unsupported, and only happens to work by accident. –Tim]&lt;br /&gt;&lt;br /&gt;Also, you can check to see if your application is debuggable. If your application tries to keep itself from performing normally if the debug flag is set, it may be harder for an attacker to compromise:&lt;br /&gt;&lt;br /&gt;boolean isDebuggable =  ( 0 != ( getApplcationInfo().flags &amp;= ApplicationInfo.FLAG_DEBUGGABLE ) );&lt;br /&gt;Technique: Offload license validation to a trusted server&lt;br /&gt;&lt;br /&gt;If your application has an online component, a very powerful technique to prevent piracy is to send a copy of the license server response, contained inside the ResponseData class, along with its signature, to your online server. Your server can then verify that the user is licensed, and if not refuse to serve any online content.&lt;br /&gt;&lt;br /&gt;Since the license response is cryptographically signed, your server can check to make sure that the license response hasn’t been tampered with by using the public RSA key stored in the Android Market publisher console.&lt;br /&gt;&lt;br /&gt;When performing the server-side validation, you will want to check all of the following:&lt;br /&gt;&lt;br /&gt;That the response signature is valid.&lt;br /&gt;That the license service returned a LICENSED response.&lt;br /&gt;That the package name and version code match the correct application.&lt;br /&gt;That the license response has not expired (check the VT license response extra).&lt;br /&gt;You should also log the userId field to ensure that a cracked application isn’t replaying a license response from another licensed user. (This would be visible by an abnormally high number of license checks coming from a single userId.)&lt;br /&gt;To see how to properly verify a license response, look at LicenseValidator.verify().&lt;br /&gt;&lt;br /&gt;As long as the license check is entirely handled within server-code (and your server itself is secure), it’s worth nothing that even an expert cracker cannot circumvent this mechanism. This is because your server is a trusted computing environment.&lt;br /&gt;&lt;br /&gt;Remember that any code running on a computer under the user’s control (including their Android device) is untrusted. If you choose to inform the user that the server-side license validation has failed, this must only be done in an advisory capacity. You must still make sure that your server refuses to serve any content to an unlicensed user.&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;In summary, remember that your goal as an application developer is to make your application’s LVL implementation unique, difficult to trace when decompiled, and resistant to any changes that might be introduced. Realize that this might involve modifying your code in ways that seem counter-intuitive from a traditional software engineering viewpoint, such as removing functions and hiding license check routines inside unrelated code.&lt;br /&gt;&lt;br /&gt;For added protection, consider moving the license check to a trusted server, where attackers will be unable to modify the license check code. While it’s impossible to write 100% secure validation code on client devices, this is attainable on a machine under your control.&lt;br /&gt;&lt;br /&gt;And above all else, be creative. You have the advantage in that you have access to a fully annotated copy of your source code — attackers will be working with uncommented bytecode. Use this to your advantage.&lt;br /&gt;&lt;br /&gt;Remember that, assuming you’ve followed the guidelines here, attackers will need to crack each new version of your application. Add new features and release often, and consider modifying your LVL implementation with each release to create additional work for attackers.&lt;br /&gt;And above all else, listen to your users and keep them happy. The best defense against piracy isn’t technical, it’s emotional.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-6168464770916627809?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/6168464770916627809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/securing-android-lvl-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/6168464770916627809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/6168464770916627809'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/securing-android-lvl-applications.html' title='Securing Android LVL Applications'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-4557623403300493767</id><published>2010-10-02T06:47:00.001-07:00</published><updated>2010-10-02T06:51:42.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='voice actions support'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Supporting the new music Voice Action</title><content type='html'>Google Android recently launched &lt;a href="http://googleblog.blogspot.com/2010/08/just-speak-it-introducing-voice-actions.html"&gt;Voice Actions&lt;/a&gt; in the new Google Voice Search for Android — an awesome new way to search, control, and communicate on your phone faster than ever before, by using your voice.&lt;br /&gt;&lt;br /&gt;One of these new Voice Actions lets users find and automatically play music. By speaking something like “listen to They Might Be Giants” into the new Voice Search, users can quickly find the music they want online and play it, using any number of different apps. (Pandora, Last.fm, Spotify, mSpot, and Rdio are among the first apps to support this.)&lt;br /&gt;&lt;br /&gt;To do this, Google leveraged a very common little piece of Android magic: a new Intent. If you develop a music app that supports open-ended music search, you can make it work with users speaking “listen to” Voice Actions simply by registering for the new intent we’ve defined. This new intent isn’t defined as a constant in the SDK yet, but google wanted to make sure music app developers had all the information needed to use it right away.&lt;br /&gt;&lt;br /&gt;Here’s all you should need to know::&lt;br /&gt;&lt;br /&gt;1.In your AndroidManifest.xml, just register one of your activities for the new intent android.media.action.MEDIA_PLAY_FROM_SEARCH:&lt;br /&gt;&lt;br /&gt;EX:&lt;br /&gt;&lt;application android:label="@string/app_name" android:icon="@drawable/icon"&gt;&lt;br /&gt;    &lt;activity android:name="MusicActivity" android:label="@string/app_name"&gt;&lt;br /&gt;        &lt;intent-filter&gt;&lt;br /&gt;            &lt;action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /&gt;&lt;br /&gt;            &lt;category android:name="android.intent.category.DEFAULT" /&gt;&lt;br /&gt;        &lt;/intent-filter&gt;&lt;br /&gt;    &lt;/activity&gt;&lt;br /&gt;&lt;/application&gt;&lt;br /&gt;&lt;br /&gt;2.When your activity receives this intent, you can find the user’s search query inside the SearchManager.QUERY string extra:&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.SearchManager;&lt;br /&gt;&lt;br /&gt;public class MusicActivity extends Activity {&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        String query = getIntent().getStringExtra(SearchManager.QUERY);&lt;br /&gt;        // Do something with query...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This will represent everything the user spoke after “listen to”. This is totally open-ended voice recognition, and it expects very flexible search — so, for example, the string could be the name of any artist (“they might be giants”), an album (“factory showroom”), a song (“metal detector”), or a combination of any of these (“metal detector by they might be giants”).&lt;br /&gt;&lt;br /&gt;A few subtle details worth understanding about this intent:&lt;br /&gt;&lt;br /&gt;Your app should do its best to quickly find and automatically play music corresponding to the user’s search query. The intention here is to get users to their desired result as fast as possible, and in this case, that means playing music quickly.&lt;br /&gt;&lt;br /&gt;This will really only work well for music apps that can find music across a very large corpus of options. Because our voice recognition doesn’t currently support any way to provide a list of specific songs to be recognized, trying to use it against a small set of music choices will work poorly — things which are not in the set will be over-recognized, and things which are in the set may not be recognized well. So if you’re not the developer of a large-scale cloud music application, this intent is probably not for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-4557623403300493767?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/4557623403300493767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/supporting-new-music-voice-action.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/4557623403300493767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/4557623403300493767'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/supporting-new-music-voice-action.html' title='Supporting the new music Voice Action'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5250206699383238282</id><published>2010-10-02T06:30:00.000-07:00</published><updated>2010-10-02T06:44:02.411-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='market'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android Market Information</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Uploading applications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you've registered, it's easy to upload your application to Android Market. From the home screen, select "Upload Applications." You'll be asked to fill in the following information for your app.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Listing Details&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Language:&lt;br /&gt;This is to denote the language of your application. Default language is US English. More languages will become available as Android-powered devices become available in those languages.&lt;br /&gt;&lt;br /&gt;Title: &lt;br /&gt;The name of your application as you would like it to appear in Android Market. You may add one per language.&lt;br /&gt;&lt;br /&gt;Description: &lt;br /&gt;The description of your application as you would like to appear in &lt;br /&gt;Android Market.&lt;br /&gt;&lt;br /&gt;Application Type: &lt;br /&gt;Android Market is divided into 2 major applications types: "Applications" and "Games." Please choose one.&lt;br /&gt;Category:You must select a category for your application. Read more about categories.&lt;br /&gt;&lt;br /&gt;Publishing options&lt;br /&gt;Copy protection: Copy protection helps prevent applications from being copied from a device. Increases the amount of memory on the phone required to install the application. (You may also implement your own copy protection scheme.)&lt;br /&gt;&lt;br /&gt;Locations: These are the locations in which you may distribute your applications.&lt;br /&gt;Not all locations listed currently have users with Android-powered devices.&lt;br /&gt;You may select locations one-by-one or choose the "All current and future locations" option. This option means that, as we add more distribution locations, these locations will be enabled for your app. Before you check this option, please brush up on Export Compliance.&lt;br /&gt;&lt;br /&gt;Note: At this time, you may only sell applications to users in these locations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Contact information&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You must pick one support channel for your app - Website, Email, or Phone&lt;br /&gt;This information is viewable to users from Android Market&lt;br /&gt;You may choose to offer multiple channels for support&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Transaction Fee &amp; Profit:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or applications that you choose to sell in Android Market, the transaction fee is equivalent to 30% of the application price. For example, if you sell your application at a price of $10.00, the fee will be $3.00, and you will receive $7.00 in payment. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting Price of an Application:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once you've set a price for an application, you may choose to change it at any time.&lt;br /&gt;&lt;br /&gt;If you have previously published an application for free, you cannot change it to have a price. You'll need to upload a new APK and add a price.&lt;br /&gt;Allowable price ranges:&lt;br /&gt;&lt;br /&gt;CAD: 0.99 CAD - 210 CAD&lt;br /&gt;CHF: 0.99 CHF - 200 CHF&lt;br /&gt;DKK: 6 DKK - 1200 DKK&lt;br /&gt;EUR: 0.50 EUR - 100 EUR&lt;br /&gt;GBP: 0.50 GBP - 100 GBP&lt;br /&gt;HKD: 7 HKD - 1500 HKD&lt;br /&gt;JPY: 99 JPY - 20000 JPY&lt;br /&gt;NOK: 6 NOK - 1200 NOK&lt;br /&gt;NZD: 0.99 NZD - 280 NZD&lt;br /&gt;SEK: 7 SEK - 1500 SEK&lt;br /&gt;SGD: 0.99 SGD - 270 SGD&lt;br /&gt;USD: $0.99 - $200&lt;br /&gt;&lt;br /&gt;If you're already an Android Market Publisher, make sure that you've signed up as a Google Checkout Merchant so that you may sell apps:&lt;br /&gt;&lt;br /&gt;1.Log into your Android Market account at http://market.android.com/publish/&lt;br /&gt;&lt;br /&gt;2.Click on the "Edit profile" link.&lt;br /&gt;&lt;br /&gt;3.Select "Setup a Merchant Account at Google Checkout."&lt;br /&gt;&lt;br /&gt;This will take you to the Google Checkout site to sign up as a Merchant; you'll need to have information about your business handy to complete this step. Learn more about the requirements to be a Google Checkout Merchant.&lt;br /&gt;&lt;br /&gt;Once you've set up a Google Checkout account, you'll need to take steps to ensure your apps are sold with the proper tax for your location.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Changing your Email Address ;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Changing your application's support address:&lt;br /&gt;You can change the email address that is displayed with your app in Android Market by following these steps:&lt;br /&gt;Log into your Android Market account&lt;br /&gt;Select the application.&lt;br /&gt;Under "Contact Information," input the new email address.&lt;br /&gt;Click "Save" to save your settings.&lt;br /&gt;&lt;br /&gt;Changing your Android Market contact address:&lt;br /&gt;You can change the email address that used by Android Market to contact you by following these steps:&lt;br /&gt;&lt;br /&gt;Log into your Android Market account&lt;br /&gt;Click on the "Edit profile" link. This should bring you to this page http://market.android.com/publish/editProfile.&lt;br /&gt;Input the new email address.&lt;br /&gt;Click "Save" to save your settings.&lt;br /&gt;&lt;br /&gt;Changing your sign-in address:&lt;br /&gt;Currently, it is not possible to change the Google Account that is associated with signing-in your Android Market publisher account.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Application Statistics:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;At the moment, you will be able to view the following statistics about your published applications:&lt;br /&gt;Star ratings&lt;br /&gt;Number of installs&lt;br /&gt;Number of active installs (number of installs - uninstalls)&lt;br /&gt;Please note that the statistics remain constant for the same package name, i.e. every time you upload a new version of your application, the stats will not change.&lt;br /&gt;&lt;br /&gt;We're working hard to add more information about your applications, so please stay tuned!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ratings:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ratings are determined by our Android Market users. After downloading an app, users can give a star rating and a comment. They are only able to rate or comment once per app.&lt;br /&gt;Please note that currently ratings and comments carry forward through different version of the same package (i.e. ratings do not re-start when you publish a new version of your app.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Supporting for User from Android Market:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To create the best possible user experience and quickly grow your application's popularity, we recommend that you create comprehensive help resources. Users are more likely to continue to use your app and to share it with their friends if they understand how it works and how to contact you with questions or bugs. The Android Market team won't provide user support for individual apps. By offering support for your application, you'll not only help create a great user experience, but also be able to leverage user feedback to enhance and grow your application.&lt;br /&gt;&lt;br /&gt;The following list specifies the minimum support requirements you should include:&lt;br /&gt;Your name or the name of your organization so users can easily identify the authors.&lt;br /&gt;A basic level of FAQ/help content hosted somewhere externally (e.g. on your site or blog). This could include a summary of the app's purpose, information on basic functionality and use, and any questions you frequently receive from users.&lt;br /&gt;The URL to the help content so that it can be linked from the "About this App" page.&lt;br /&gt;Provide users with a way to contact you (email address, webpage, or forum which you regularly monitor and participate in). This is an important part of creating a positive community surrounding your app, getting user feedback, and troubleshooting assistance with bugs.&lt;br /&gt;Managing a high support volume:&lt;br /&gt;We highly recommend using a webpage with a contact form instead of an email address. We also recommend creating an autoreply that communicates common answers to users and sets expectations on the support level you are able to provide.&lt;br /&gt;&lt;br /&gt;Android Market Issues&lt;br /&gt;Please direct users to the &lt;a href="http://http://market.android.com/support/bin/topic.py?topic=15869"&gt;Market Help Center&lt;/a&gt; and Forum for questions related to the following:&lt;br /&gt;&lt;br /&gt;Download or installation issues&lt;br /&gt;Problems accessing Android Market&lt;br /&gt;Payment or Google Checkout questions&lt;br /&gt;Problems finding applications&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5250206699383238282?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5250206699383238282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/android-market-information.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5250206699383238282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5250206699383238282'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/android-market-information.html' title='Android Market Information'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-9108313294311577448</id><published>2010-10-01T23:09:00.000-07:00</published><updated>2010-10-01T23:10:53.896-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lbs'/><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>GPS(Global Positioning System) History Overview Part-2</title><content type='html'>&lt;span style="font-weight:bold;"&gt;History of GPS:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;he design of GPS is based partly on similar ground-based radio navigation systems, such as LORAN and the Decca Navigator developed in the early 1940s, and used during World War II. In 1956 Friedwardt Winterberg[12] proposed a test of general relativity using accurate atomic clocks  placed in orbit in artificial satellites. To achieve accuracy requirements, GPS uses principles of general relativity to correct the satellites' atomic clocks. Additional inspiration for GPS came when the Soviet Union launched the first man-made satellite, Sputnik  in 1957. A team of U.S. scientists led by Dr. Richard B. Kershner were monitoring Sputnik's radio transmissions. They discovered that, because of the Doppler effect, the frequency of the signal being transmitted by Sputnik was higher as the satellite approached, and lower as it continued away from them. They realized that since they knew their exact location on the globe, they could pinpoint where the satellite was along its orbit by measuring the Doppler distortion (see Transit (satellite)).&lt;br /&gt;&lt;br /&gt;The first satellite navigation system, Transit, used by the United States Navy, was first successfully tested in 1960. It used a constellation of five satellites and could provide a navigational fix approximately once per hour. In 1967, the U.S. Navy developed the Timation satellite that proved the ability to place accurate clocks in space, a technology that GPS relies upon. In the 1970s, the ground-based Omega Navigation System, based on phase comparison of signal transmission from pairs of stations,[13] became the first worldwide radio navigation system. However, limitations of these systems drove the need for a more universal navigation solution with greater accuracy.&lt;br /&gt;&lt;br /&gt;While there were wide needs for accurate navigation in military and civilian sectors, almost none of those were seen as justification for the billions of dollars it would cost in research, development, deployment, and operation for a complex constellation of navigation satellites. However during the Cold War arms race, the nuclear threat to the very existence of the United States was the one need that did justify this cost in the view of the US Congress. This deterrent effect is why GPS was funded. The nuclear triad consisted of the US Navy's submarine-launched ballistic missiles (SLBMs) along with the US Air Force's strategic bombers and intercontinental ballistic missiles (ICBMs). Considered vital to the nuclear deterrence posture, accurate determination of the SLBM launch position was a force multiplier.&lt;br /&gt;&lt;br /&gt;Precise navigation would enable US submarines to get an accurate fix of their positions prior to launching their SLBMs.[14] The US Air Force with two-thirds of the nuclear triad also had requirements for a more accurate and reliable navigation system. The Navy and Air Force were developing their own technologies in parallel to solve what was essentially the same problem. To increase the survivability of ICBMs, there was a proposal to use mobile launch platforms so the need to fix the launch position had similarity to the SLBM situation.&lt;br /&gt;&lt;br /&gt;In 1960, the Air Force proposed a radio-navigation system called MOSAIC (Mobile System for Accurate ICBM Control) that was essentially a 3-D LORAN. A follow-on study called Project 57 was worked in 1963 and it was "in this study that the GPS concept was born." That same year the concept was pursued as Project 621B, which had "many of the attributes that you now see in GPS"[15] and promised increased accuracy for Air Force bombers as well as ICBMs. Updates from the Navy Transit system were too slow for the high speeds that the Air Force operated at. The Navy Research Laboratory continued advancements with their Timation (Time Navigation) satellites, first launched in 1967, and with the third one in 1974 carrying the first atomic clock put into orbit.[16]&lt;br /&gt;&lt;br /&gt;With these parallel developments out of the 1960s, it was realized that a superior system could be developed by synthesizing the best technologies from 621B, Transit, Timation and SECOR in a multi-service program. Over the Labor Day weekend in 1973, a meeting of about 12 military officers at the Pentagon discussed the creation of a Defense Navigation Satellite System (DNSS). It was at this meeting that "the real synthesis that became GPS was created." Later that year, the DNSS program was named Navstar. With the individual satellites being associated with the name Navstar (as with the predecessors Transit and Timation), a more fully encompassing name was used to identify the constellation of Navstar satellites. This more complete name was Navstar-GPS, which was later shortened simply to GPS.[17]&lt;br /&gt;&lt;br /&gt;After Korean Air Lines Flight 007, carrying 269 people, was shot down in 1983 after straying into the USSR's prohibited airspace,[18] in the vicinity of Sakhalin and Moneron Islands, President Ronald Reagan issued a directive making GPS freely available for civilian use, once it was sufficiently developed, as a common good.[19] The first satellite was launched in 1989, and the 24th satellite was launched in 1994.&lt;br /&gt;&lt;br /&gt;Initially, the highest quality signal was reserved for military use, and the signal available for civilian use was intentionally degraded ("Selective Availability", SA). This changed with U.S. President Bill Clinton ordering Selective Availability turned off at midnight May 1, 2000, improving the precision of civilian GPS from 300 meters (about 1000 feet) to 20 meters (about 65 feet). The U.S. military by then had the ability to deny GPS service to potential adversaries on a regional basis.[20]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-9108313294311577448?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/9108313294311577448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/gpsglobal-positioning-system-history.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/9108313294311577448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/9108313294311577448'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/gpsglobal-positioning-system-history.html' title='GPS(Global Positioning System) History Overview Part-2'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5476196598120386367</id><published>2010-10-01T22:57:00.000-07:00</published><updated>2010-10-01T23:02:35.560-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lbs'/><category scheme='http://www.blogger.com/atom/ns#' term='structure'/><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><title type='text'>GPS(Global Positioning System) Overview - Part 1</title><content type='html'>&lt;span style="font-weight:bold;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Global_Positioning_System"&gt;Basic Introduction about GPS&lt;/a&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; The Global Positioning System (GPS) is a network of 24 Navstar satellites orbiting Earth at 11,000 miles. Originally established by the U.S. Department of Defence (DOD) at a cost of about US$13 billion, access to GPS is free to all users, including those in other countries. The system’s positioning and timing data are used for a variety of applications, including air, land and sea navigation, vehicle and vessel tracking, surveying and mapping, and asset and natural resource management. With military accuracy restrictions partially lifted in March 1996 and fully lifted in May 2000, GPS can now pinpoint the location of objects as small as a penny anywhere on the earth’s surface.&lt;br /&gt;&lt;br /&gt;    The first GPS satellite was launched in 1978. The first 10 satellites were development satellites, called Block I. From 1989 to 1993, 23 production satellites, called Block II were launched. The launch of the 24th satellite in 1994 completed the system. The DOD keeps 4 satellites in reserve to replace any destroyed or defective satellites. The satellites are positioned so that signals from six of them can be received nearly 100 percent of the time at any point on earth.&lt;br /&gt;&lt;br /&gt;    GPS provides specially coded satellite signals that can be processed in a GPS receiver, enabling the receiver to compute position, velocity and time. Basically GPS works by using four GPS satellite signals to compute positions in three dimensions (and the time offset) in the receiver clock. So by very accurately measuring our distance from these satellites a user can triangulate their position anywhere on earth.&lt;br /&gt;&lt;br /&gt;    GPS receivers have been miniaturised to just a few integrated circuits and so are becoming very economical. And that makes the technology accessible to virtually everyone. These days GPS is finding its way into cars, boats, planes, construction equipment, movie making gear, farm machinery, even laptop computers. This report shows the various features of GPS and the reasons why it may soon become almost as basic as the telephone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Structure :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;GPS consists of three parts: the space segment, the control segment, and the user segment. The U.S. Air Force develops, maintains, and operates the space and control segments. GPS satellites broadcast signals  from space, which each GPS receiver uses to calculate its three-dimensional location (latitude, longitude, and altitude) plus the current time.[2]&lt;br /&gt;&lt;br /&gt;The space segment is composed of 24 to 32 satellites in medium Earth orbit and also includes the boosters required to launch them into orbit. The control segment is composed of a master control station, an alternate master control station, and a host of dedicated and shared ground antennas and monitor stations. The user segment is composed of hundreds of thousands of U.S. and allied military users of the secure GPS Precise Positioning Service, and tens of millions of civil, commercial, and scientific users of the Standard Positioning Service (see GPS navigation devices).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5476196598120386367?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5476196598120386367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/gpsglobal-positioning-system-overview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5476196598120386367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5476196598120386367'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/gpsglobal-positioning-system-overview.html' title='GPS(Global Positioning System) Overview - Part 1'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5856949420222228061</id><published>2010-10-01T01:41:00.000-07:00</published><updated>2010-10-01T01:42:24.705-07:00</updated><title type='text'>The Appcelerator-IDC Survey Reveals Android's Strategic Advantage</title><content type='html'>Appcelerator, leading provider of mobile and desktop applications for web developers, partnered with International Data Corporation (IDC (News - Alert)), to conduct a joint Appcelerator-IDC survey, interviewing around 2,400 application developers worldwide. As per the survey results, developers are planning to build applications for mobile and tablet platforms using their preferred mobile API.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Appcelerator-IDC Q4 Mobile Developer Report revealed that in the entertainment market, including Television and embedded devices, Titanium developers prefer Android (News - Alert) over iOS platform. Popular social, advertising, commerce, media, and other web-based APIs are competing against each other and the survey provides a fresh insight into who’s winning the war in the mobile application landscape.&lt;br /&gt;&lt;br /&gt;The Appcelerator-IDC survey’s key findings helped uncover Android’s strategic advantage, showcasing that almost 72 percent of developers found Android to empower large number of next generation connected devices compared to 25 percent for Apple’s (News - Alert) iOS. In contrast, iOS currently dominates across all categories in terms of revenue/market opportunity and current devices. Almost 91 percent of the developers are more interested in developing for Apple phones compared to 82 percent for Android phones. The survey reveals that 44 percent of the developers are interested in developing for Google TV while 40 percent for Apple TV. Also around 62 percent of developers show strong interest in Android tablets compared to the low interest shown for webOS and BlackBerry tablets; thus encouraging the growth of Android based device OEMs. The only Google drawback seems to be Fragmentation with 74 percent of developers voting for the least fragmented Apple iOS.&lt;br /&gt;&lt;br /&gt;Appcelerator Titanium mobile API powers over 4,000 applications while developers are extensively leveraging third party social, commerce, advertising, messaging, media, and analytic APIs. The survey throws light on whose gaining market and who’s going down. In the social sector, Facebook leads, compared to Twitter and Foursquare (News - Alert), due to the popularity of its primary identity system for mobile applications. iOS in-app purchasing and PayPal payments are going head-to-head to dominate mobile commerce sector with PayPal (News - Alert) gaining popularity in European and Asian market. Mobile cameras are scoring better compared to photo sharing services such as Flickr and TwitPic due to advanced applications such as barcode scanning and augmented reality. iAds richer ad units and high click-through rates places it at a higher position compared to Admobs while Application analytics is gaining market with strong interest in transaction and geo-analytics mobile applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5856949420222228061?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5856949420222228061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/appcelerator-idc-survey-reveals.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5856949420222228061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5856949420222228061'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/appcelerator-idc-survey-reveals.html' title='The Appcelerator-IDC Survey Reveals Android&apos;s Strategic Advantage'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5726842230561883223</id><published>2010-10-01T01:24:00.000-07:00</published><updated>2010-10-01T01:35:52.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='connect'/><category scheme='http://www.blogger.com/atom/ns#' term='add'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><title type='text'>Connect your ADB over Wifi.</title><content type='html'>adb Wireless &amp; Some other applications are to enable/disable the wireless connection &lt;br /&gt;&lt;br /&gt;ADB (Android Debug Bridge) interface only one click button. After enabling the &lt;br /&gt;&lt;br /&gt;connection works as if we had the phone connected via USB.&lt;br /&gt;&lt;br /&gt;Pre-Condition : Rooted Phone Only!!!&lt;br /&gt;&lt;br /&gt;Download :&lt;br /&gt;&lt;br /&gt;Download directly from your Android device by searching for &lt;br /&gt;&lt;br /&gt;1.adbWireless&lt;br /&gt;2.ADB over WIFI Widget&lt;br /&gt;&lt;br /&gt;in the Market application Free of Cost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5726842230561883223?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5726842230561883223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/connect-your-adb-over-wifi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5726842230561883223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5726842230561883223'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2010/10/connect-your-adb-over-wifi.html' title='Connect your ADB over Wifi.'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1813634998441341085</id><published>2009-12-28T02:02:00.001-08:00</published><updated>2009-12-28T02:02:44.490-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android tablet'/><title type='text'>First android-based tablet pc for india</title><content type='html'>Notion Ink, a Hyderabad-based technology start-up, has developed the first touchscreen tablet which uses Google’s open source operating system Android, Nvidia’s yet-to-be launched Tegra processor chips and a power-saving display screen from the US-based fabless developer Pixel Qi.&lt;br /&gt;&lt;br /&gt;The tablet PC developed by six IITians and an MBA will be showcased for the first time at the Las Vegas Consumer Electronics Show in January 2010.&lt;br /&gt;&lt;br /&gt;“After the evolution of desktops, laptops and notebooks, the next innovation is going to be a complete touchscreen you can write on. And, we thought we needed to take the first step. It took us a year to come up with the design, requirements and proposed technologies to make this device a reality,” says Rohan Shravan, founder and director (creatives) of Notion Ink. The company was floated in February 2009.&lt;br /&gt;&lt;br /&gt;Called Notion Ink, the new tablet has a 10.1-inch touchscreen. In terms of portability, it is powered by Nvidia’s Tegra processor chip, weighs 770 grams and offers features like Bluetooth, a 3-megapixel digital camera with autofocus, video recording and 32GB data storage.&lt;br /&gt;&lt;br /&gt;“Theoretically, it can work for 25 days if one just listens to music. To be precise, it has 48 hours of standby, eight hours of high-definition video and 16 hours of Wi-Fi internet surfing usage time,” claims Shravan.&lt;br /&gt;&lt;br /&gt;For designing the device, the company collaborated with Bangalore-based National Institute of Design. “We wanted to adopt an operating system which would make our device ‘talk’ to any other device. And we chose Google’s Android. But India doesn’t have people working on Android and those who have, charge Rs 1 lakh per resource per month (like Tata Elxsi or Sasken). So, we opted to train 46 students from the Hyderabad-based information technology institute BVR IT who are now working full time with us,” he adds.&lt;br /&gt;&lt;br /&gt;Notion Ink has filed two patents — one for the design and the other for technology — in India, Taiwan and China, which makes it easy to tie up with an original equipment manufacturer (OEM) in Taiwan. It is yet to file 67 patents, most of which are for user interface, hardware changes and software optimisation . It is also working on creating digital books, songs, movies and media content for the device.&lt;br /&gt;&lt;br /&gt;Four Taiwanese companies have already evinced interest to manufacture the device. “We have global ambitions, so the US is a very important market for us, and that needs networking. For this reason, we are going to showcase our product in Las Vegas,” Shravan says, adding they are planning to launch the smartpad commercially in June 2010.&lt;br /&gt;&lt;br /&gt;The company would adopt a complete service model, wherein the Taiwanese OEM will have 90 days to manufacture and Notion Ink another 90 days to pay them back after selling the devices. It is targeting to sell 1.5 million units of the tablet PC in the first year of launch. The device is tentatively priced at below $400 (Rs 18,800) in the US and below $300 (Rs 14,100) in India (with subsidy from telecom operators).&lt;br /&gt;&lt;br /&gt;“The device will be bundled with internet services by telecom operators. Already 10 telcos in the US and four in India, which offer 3G services, have shown interest. We will be finalising one telco for the US and one for India during the four-day Mobile World Congress, which is scheduled to be held at Barcelona, Spain, from February 15, 2010,”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1813634998441341085?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1813634998441341085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/first-android-based-tablet-pc-for-india.html#comment-form' title='42 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1813634998441341085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1813634998441341085'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/first-android-based-tablet-pc-for-india.html' title='First android-based tablet pc for india'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>42</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3429877011701993022</id><published>2009-12-19T22:09:00.001-08:00</published><updated>2009-12-19T22:09:29.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android Phones Reqlising'/><title type='text'>First Android Phone Anniversary with 50 Already Planned</title><content type='html'>First Android Phone Anniversary with 50 Already Planned&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Today marks the one year anniversary of the first publicly available Android phone the HTC Dream T-Mobile G1 as it made its debut on October 22nd, 2008.&lt;br /&gt;&lt;br /&gt;I have been talking about Android for well over a year as I presented and spoke on panels at SMX Advanced, PubCon, BarCamps, Google User Technology Groups, SMX East as well a recent Cornell University study.&lt;br /&gt;&lt;br /&gt;I enjoyed seeing the evolution in awareness and respect Android has received since I first spoke about it at conferences as people would initially scoff that it would never make any real inroads into the smartphone market nevermind ultimately supplanting the mighty iPhone.&lt;br /&gt;&lt;br /&gt;Earlier this month I spoke at SMX East in New York City and provided an update with Cindy Krum on Android for WebProNews with the video below:&lt;br /&gt;&lt;br /&gt;I been keeping an updated list of all the current &amp; upcoming Android mobile phones both rumored and confirmed as it totals 50 on this one year mark.&lt;br /&gt;&lt;br /&gt;BOLD if available now / ITALICS is rumored release date&lt;br /&gt;&lt;br /&gt;1. Acer Liquid – A1 – November 28th&lt;br /&gt;2. Compulab Exeda&lt;br /&gt;3. Dell Ophone mini3i – Benzine&lt;br /&gt;4. Geek Phone One&lt;br /&gt;5. General Mobile DSTL1&lt;br /&gt;6. Haier H7&lt;br /&gt;7. HKC Pearl&lt;br /&gt;8. HighScreen PP5420&lt;br /&gt;9. HTC Click – Fiesta – Tattoo&lt;br /&gt;10. HTC Desire 6200 – November&lt;br /&gt;11. HTC Dragon – Zoom 2&lt;br /&gt;12. HTC Dream – T-Mobile G1&lt;br /&gt;13. HTC Hero – G2 Touch&lt;br /&gt;14. HTC Lancaster&lt;br /&gt;15. HTC Magic – Sapphire – T-Mobile myTouch 3G – Google Ion – Dopod A6188&lt;br /&gt;16. HTC Passion&lt;br /&gt;17. HTC Predator&lt;br /&gt;18. Huawei U8220 – T-Mobile Pulse&lt;br /&gt;19. Huawei U8230&lt;br /&gt;20. Innocomm Skate&lt;br /&gt;21. Kogan Agora&lt;br /&gt;22. Koolu Freerunner – Openmoko GTA02&lt;br /&gt;23. Lenovo O1 Ophone&lt;br /&gt;24. LG Etna&lt;br /&gt;25. LG GW620 Eve – November 2009&lt;br /&gt;26. LG GW880&lt;br /&gt;27. Motorola Calgary&lt;br /&gt;28. Motorola Devour&lt;br /&gt;29. Motorola Droid – Sholes – Tao – November 7th&lt;br /&gt;30. Motorola Heron&lt;br /&gt;31. Motorola MB200&lt;br /&gt;32. Motorola MB300&lt;br /&gt;33. Motorola Morrison – Cliq – DEXT&lt;br /&gt;34. Motorola Motis – 2010&lt;br /&gt;35. Motorola Sholes Tablet – 2010&lt;br /&gt;36. Motorola Zeppelin – 2010&lt;br /&gt;37. Philips V808&lt;br /&gt;38. Qigi i6&lt;br /&gt;39. Samsung Behold 2 T939 – November 18th&lt;br /&gt;40. Samsung Bigfoot&lt;br /&gt;41. Samsung Galaxy i7500&lt;br /&gt;42. Samsung Galaxy Lite i5700 – Spica – 2010&lt;br /&gt;43. Samsung Houdini&lt;br /&gt;44. Samsung m850 Q&lt;br /&gt;45. Samsung Moment – InstinctQ m900 – November 1st&lt;br /&gt;46. Sciphone N12&lt;br /&gt;47. Sony Ericsson XPERIA X3 / x10 Rachael – January 2010&lt;br /&gt;48. Sunno S880&lt;br /&gt;49. Tiger G3&lt;br /&gt;50. ZTE Android&lt;br /&gt;&lt;br /&gt;I am curious to the expansion of this number at the next anniversary of the G1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3429877011701993022?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3429877011701993022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/first-android-phone-anniversary-with-50.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3429877011701993022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3429877011701993022'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/first-android-phone-anniversary-with-50.html' title='First Android Phone Anniversary with 50 Already Planned'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3524091635513729062</id><published>2009-12-19T22:03:00.001-08:00</published><updated>2009-12-19T22:03:35.160-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android project'/><title type='text'>A closer look at the Android project build system intial</title><content type='html'>In this two part post we will take a closer look at the structure of the build system for native functionality. The build system is based on make and resides in the build folder in the project. The first part will look at what is found in this folder while the second part discusses the Android.mk file and options.&lt;br /&gt;&lt;br /&gt;envsetup.sh&lt;br /&gt;There is one important file in build directory itself. That is the envsetup.sh file. This shell script contains a lot of functionality that is nice to have when working with Android. To invoke it type&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;. build/envsetup.sh&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;in the android root directory. This will allow you to use a number of new commands including:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;m - make from the top of the tree&lt;br /&gt;mm - builds all modules in the current directory&lt;br /&gt;cgrep - grep in all c-files&lt;br /&gt;jgrep - grep in all java-files&lt;br /&gt;mgrep - grep in all makefiles&lt;br /&gt;lunch - choose build target&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;These shell commands are very useful when working with the platform. Whether you are looking for something specific in a source file or you just want to build the current module for a test.&lt;br /&gt;&lt;br /&gt;build/target&lt;br /&gt;The target directory contains make configurations for different boards and products. The target directory is where new products can be added as needed by a hardware manufacturer. In the current release there is a generic product description, and sdk product and some other files. The available boards are the emulator, a generic board and the simulator.&lt;br /&gt;&lt;br /&gt;The board makefiles describe the hardware platform level and can be shared among a number of products. For example you can build both the generic product and the generic_with_google product to run on in the emulator.&lt;br /&gt;&lt;br /&gt;The makefiles for different products are listed in the file AndroidProducts.h. To add a new product put the makefile in the build/target/product folder and add the product to AndroidProduct.h. It is possible for product makefiles to inherit from each other to reduce the need for copying. The generic_with_google products inherits the generic product that inherits the core product to make up a three level product specification.&lt;br /&gt;&lt;br /&gt;build/core&lt;br /&gt;The core folder is the location of the build system files. These files are used to set up the build system and to build all the different modules as configured in the individual Android.mk files. The main.mk file is the entry point to the build system and it is this files that is included in the top level makefile in the project root directory. The build system can also be invoked by the shell command mm with at subset of the makefiles&lt;br /&gt;&lt;br /&gt;The include order and hierarchy of the makefiles is rather complicated but an attempt of illustration can be found in this figure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Most of the build configuration is set in the config.mk file and the definitions.mk file contains the functions to be invoked for the different source types. In the above figure the build system is invoked to build a shared library. The Android makefile uses the BUILD_SHARED_LIBRARY variable set in the config.mk file. This will set the build chain for building a shared library in a number of steps using several other files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3524091635513729062?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3524091635513729062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/closer-look-at-android-project-build_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3524091635513729062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3524091635513729062'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/closer-look-at-android-project-build_19.html' title='A closer look at the Android project build system intial'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-5492965719361158760</id><published>2009-12-19T22:00:00.000-08:00</published><updated>2009-12-19T22:01:45.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android project look up'/><title type='text'>A closer look at the Android project build system</title><content type='html'>This is the second post on the build system where we will take a closer look at the Android.mk file and what options are available. An Android.mk file describes the build for any native module that should go in the platform. We will start by looking at the makefile for the external ping facility found in external/ping.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ifneq ($(TARGET_SIMULATOR),true)&lt;br /&gt;&lt;br /&gt;LOCAL_PATH:= $(call my-dir)&lt;br /&gt;&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;LOCAL_SRC_FILES:= ping.c&lt;br /&gt;LOCAL_MODULE := ping&lt;br /&gt;LOCAL_STATIC_LIBRARIES := libcutils libc&lt;br /&gt;include $(BUILD_EXECUTABLE)&lt;br /&gt;&lt;br /&gt;endif  # TARGET_SIMULATOR != true&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The first line is just a check if we are building for the (obsolete?) simulator. The next line sets the local path to the current directory (the directory of this Android.mk file). This is handled by a function called mydir that can be found in the definitions.mk file in the build system.&lt;br /&gt;&lt;br /&gt;The next step is to include a makefile that will clear all local variables with the line include $(CLEAR_VARS). CLEAR_VARS is set in the build configuration in config.mk and will include the clear_vars.mk file at this point. The main purpose of this include is to make sure that we do not use any local variables set by another module.&lt;br /&gt;&lt;br /&gt;After the two initial lines that basically prepares the build system to start with this module we set the build variables. These are&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LOCAL_SRC_FILES - the source files that make up this module&lt;br /&gt;LOCAL_MODULE - the name of the module&lt;br /&gt;LOCAL_STATIC_LIBRARIES - libraries to statically link to this module&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Since ping will be an executable command placed in /system/bin in the Android file system the make file for building an executable should be used. This done with the line:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;include $(BUILD_EXECUTABLE)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There are makefiles available in the build system that can be used to build a number of different types of module. To include them you may use one of the variables set in the config.mk file. A few important ones are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BUILD_EXECUTABLE - Build an executable module&lt;br /&gt;BUILD_SHARED_LIBRARY - Build a shared library&lt;br /&gt;BUILD_STATIC_LIBRARY - Build a static library&lt;br /&gt;BUILD_PREBUILT - Add prebuilt components&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is also a number of local variables that are recognized by the build system and that needs to be set in order to build your module.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LOCAL_C_INCLUDES - path to include files needed by your module, e.g. ($KERNEL_HEADERS)&lt;br /&gt;LOCAL_CFLAGS - Any additional flags to pass to the compiler&lt;br /&gt;LOCAL_LDFLAGS - Any additional flags to pass to the linker&lt;br /&gt;LOCAL_SHARED_LIBRARIES - Shared libraries that the module directly links against&lt;br /&gt;LOCAL_SRC_FILES - The source files to compile&lt;br /&gt;LOCAL_STATIC_LIBRARIES - Static libraries to include in the module&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You may use one Android.mk to build several items. It is possible to build both a library and an executable using the same makefile. To illustrate how to write a makefile for some native functionality we will look at another example. This makefile will build a shared library and an executable. It links to a couple of shared libraries in the system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LOCAL_PATH:= $(call my-dir)&lt;br /&gt;&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;#Name of target to build&lt;br /&gt;LOCAL_MODULE:= libmylibrary&lt;br /&gt;#Source files to compile&lt;br /&gt;LOCAL_SRC_FILES:= mysrcfile.c mysothersrcfile.c&lt;br /&gt;#The shared libraries to link against&lt;br /&gt;LOCAL_SHARED_LIBRARIES := libcutils&lt;br /&gt;#No special headers needed&lt;br /&gt;LOCAL_C_INCLUDES +=&lt;br /&gt;#Prelink this library, also need to add it to the prelink map&lt;br /&gt;LOCAL_PRELINK_MODULE := true&lt;br /&gt;include $(BUILD_SHARED_LIBRARY)&lt;br /&gt;&lt;br /&gt;#Clear variables and build the executable&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;LOCAL_MODULE:= myinfocmd&lt;br /&gt;LOCAL_SRC_FILES:= mycmdsrcfile.c&lt;br /&gt;include $(BUILD_EXECUTABLE)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The output of the build system is put in the out folder in the Android project. Build output is directed to a subfolder based on the product. A default build is for the generic product and will output everything target related to that folder. A shared library ends up in /out/target/product/generic/system/lib. In the same way an executable will end up in /out/target/product/generic/system/bin. The object files and intermediates are kept in the obj folder. The root, system, and data folders will be used to generate the file system images needed for Android in the last build step.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-5492965719361158760?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/5492965719361158760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/closer-look-at-android-project-build.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5492965719361158760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/5492965719361158760'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/closer-look-at-android-project-build.html' title='A closer look at the Android project build system'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-7383000297648557413</id><published>2009-12-19T21:58:00.000-08:00</published><updated>2009-12-19T21:59:13.853-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android zygot'/><title type='text'>Zygote System Process</title><content type='html'>The important processes in the system appear to be zygote (which is the app_process binary), and runtime. These are both started up by the init process. The following fragment of init.rc is relevant. It is important to note that these services have the autostart 1 attribute, indicating they are restarted if they quit.&lt;br /&gt;&lt;br /&gt;    zygote {&lt;br /&gt;        exec /system/bin/app_process&lt;br /&gt;        args {&lt;br /&gt;            0 -Xzygote&lt;br /&gt;            1 /system/bin&lt;br /&gt;            2 --zygote&lt;br /&gt;        }&lt;br /&gt;        autostart 1&lt;br /&gt;    }&lt;br /&gt;    runtime {&lt;br /&gt;        exec /system/bin/runtime&lt;br /&gt;        autostart 1&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;If we go and kill either the zygote, or runtime process something interesting happens. Firstly the other process seems to kill itself, and then the whole system seems to restart.&lt;br /&gt;Changing the ramdisk image&lt;br /&gt;&lt;br /&gt;I want to get a bit more control of what things are starting up when. To do this I need to modify the init.rc file. To do this I first extracted the the ramdisk to the fileystem so that I can modify it (gnucpio -iz -F ramdisk.img).&lt;br /&gt;&lt;br /&gt;After this I simply commented out the line from init.rc. Then we can recreate it: (gnucpio -i -t -F ../ramdisk.img | gnucpio -o -H newc -O ../rootfs.img).&lt;br /&gt;&lt;br /&gt;Note if you are using Mac OS X, you will need to download and install gnucpio, becuase the built-in cpio doesn't support newc.&lt;br /&gt;&lt;br /&gt;We can then use the emulator -ramdisk option to load our new ramdisk.&lt;br /&gt;Manual startup&lt;br /&gt;&lt;br /&gt;Now we can start things up manually. First we start up the zygote process. As # app_process -Xzygote /system/bin --zygote. When we do that there is no output either on the console, or on the LCD. Next we start the runtime process ( # runtime), and now things start to happen!&lt;br /&gt;&lt;br /&gt;Once both processes start we get the cylon image, and we also end up with some console output:&lt;br /&gt;&lt;br /&gt; Prepping: /system/app/AlarmProvider.apk:/system/app/Browser.apk:/system/app/Ca&lt;br /&gt;lendar.apk:/system/app/Camera.apk:/system/app/Contacts.apk:/system/app/Developm&lt;br /&gt;ent.apk:/system/app/GDataFeedsProvider.apk:/system/app/Gmail.apk:/system/app/Gm&lt;br /&gt;ailProvider.apk:/system/app/GoogleApps.apk:/system/app/GoogleAppsProvider.apk:/&lt;br /&gt;system/app/Home.apk:/system/app/ImProvider.apk:/system/app/Maps.apk:/system/app&lt;br /&gt;/MediaPickerActivity.apk:/system/app/MediaProvider.apk:/system/app/Phone.apk:/s&lt;br /&gt;ystem/app/PimProvider.apk:/system/app/ApiDemos.apk:/system/app/SettingsProvider&lt;br /&gt;.apk:/system/app/Sms.apk:/system/app/SyncProvider.apk:/system/app/TelephonyProv&lt;br /&gt;ider.apk:/system/app/XmppService.apk:/system/app/YouTube.apk&lt;br /&gt;&lt;br /&gt;File not found: /system/app/AlarmProvider.apk&lt;br /&gt;File not found: /system/app/Calendar.apk&lt;br /&gt;File not found: /system/app/Camera.apk&lt;br /&gt;File not found: /system/app/GDataFeedsProvider.apk&lt;br /&gt;File not found: /system/app/Gmail.apk&lt;br /&gt;File not found: /system/app/GmailProvider.apk&lt;br /&gt;File not found: /system/app/MediaPickerActivity.apk&lt;br /&gt;File not found: /system/app/PimProvider.apk&lt;br /&gt;File not found: /system/app/ApiDemos.apk&lt;br /&gt;File not found: /system/app/Sms.apk&lt;br /&gt;File not found: /system/app/SyncProvider.apk&lt;br /&gt;File not found: /system/app/YouTube.apk&lt;br /&gt; Prep complete&lt;br /&gt;&lt;br /&gt;It might give some clue of which Google applications will be available in the future. :)&lt;br /&gt;&lt;br /&gt;The output from runtime looks like this:&lt;br /&gt;&lt;br /&gt;+++ post-zygote&lt;br /&gt;&lt;br /&gt;There is also some interesting output from the kernel. In particular the binder_open log. We can look at these in more detail later.&lt;br /&gt;&lt;br /&gt;binder_open(c086f300 c0832160) (pid 462) got c5cea000&lt;br /&gt;binder_open(c086f300 c095ec40) (pid 475) got c4e8b000&lt;br /&gt;binder_open(c086f300 c095ef40) (pid 476) got c46f8000&lt;br /&gt;android_power: auto off timeout set to 604800 seconds&lt;br /&gt;Descriptor2Node failed secondary: desc=4, max=32, node=c4e8c350, weak=0&lt;br /&gt;binder_open(c086f300 c4008d60) (pid 513) got c473a000&lt;br /&gt;binder_open(c086f300 c4008760) (pid 512) got c39fc000&lt;br /&gt;binder_open(c086f300 c4008260) (pid 531) got c35e3000&lt;br /&gt;&lt;br /&gt;That is about enough detail for this entry, next time I'll be using strace to try and get a bit more information about these processes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-7383000297648557413?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/7383000297648557413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/zygote-system-process.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7383000297648557413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7383000297648557413'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/zygote-system-process.html' title='Zygote System Process'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-4026404603483866482</id><published>2009-12-19T21:47:00.000-08:00</published><updated>2009-12-19T21:48:57.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android commands'/><title type='text'>Instaling &amp; Deleting Applications from Android emulator Command Line</title><content type='html'>1. Go to the tools directory in command prompt – c:\&gt;android\tools&lt;br /&gt;2. Type adb shell&lt;br /&gt;3. #cd /data/app (this takes you to the folder where all apk files are installed)&lt;br /&gt;4. #ls (It will display all the .apk installed in your emulator)&lt;br /&gt;5. #rm ***.apk (which you want to remove, all apk files)&lt;br /&gt;6.#exit (exits from the adb shell)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NOTE: to start the emulator, you can start it from eclipse by right clicking an android project and “run as” an “application” or by going to tools directory at command prompt and typing “emulator –avd &lt;avd_name&gt;”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-4026404603483866482?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/4026404603483866482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/instaling-deleting-applications-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/4026404603483866482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/4026404603483866482'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/instaling-deleting-applications-from.html' title='Instaling &amp; Deleting Applications from Android emulator Command Line'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1406414457216119239</id><published>2009-12-19T21:46:00.000-08:00</published><updated>2009-12-19T21:47:06.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android boot process'/><title type='text'>The Android boot process from power on</title><content type='html'>Since mobile platforms and embedded systems has some differences compared to Desktop systems in how they initially start up and boot this post will discuss the initial boot stages of an Android phone in some detail. Since we have used the Beagle Board as reference in some previous examples any specifics here are related to a similar system.&lt;br /&gt;&lt;br /&gt;1. Power on and boot ROM code execution&lt;br /&gt;At power on the CPU will be in a state where no initializations have been done. Internal clocks are not set up and the only memory available is the internal RAM. When power supplies are stable the execution will start with the Boot ROM code. This is a small piece of code that is hardwired in the CPU ASIC. For more information on boot ROM and configurations study the initalization chapter in&lt;br /&gt;the Omap 3530 TRM.&lt;br /&gt;&lt;br /&gt;    * A. The Boot ROM code will detect the boot media using a system register that maps to some physical balls on the asic. This is to determine where to find the first stage of the boot loader.&lt;br /&gt;    * B. Once the boot media sequence is established the boot ROM will try to load the first stage boot loader to internal RAM. Once the boot loader is in place the boot ROM code will perform a jump and execution continues in the boot loader.&lt;br /&gt;&lt;br /&gt;2. The boot loader&lt;br /&gt;The boot loader is a special program separate from the Linux kernel that is used to set up initial memories and load the kernel to RAM. On desktop systems the boot loaders are programs like GRUB and in embedded Linux uBoot is often the boot loader of choice. Device manufacturers often use their own proprietary boot loaders. The requirements on a boot loader for Linux running on an ARM system can be found in the Booting document under /Documentation/arm in the kernel source tree.&lt;br /&gt;&lt;br /&gt;    * A. The first boot loader stage will detect and set up external RAM.&lt;br /&gt;    * B. Once external RAM is available and the system is ready the to run something more significant the first stage will load the main boot loader and place it in external RAM.&lt;br /&gt;    * C. The second stage of the boot loader is the first major program that will run. This may contain code to set up file systems, additional memory, network support and other things. On a mobile phone it may also be responsible for loading code for the modem CPU and setting up low level memory protections and security options.&lt;br /&gt;    * D. Once the boot loader is done with any special tasks it will look for a Linux kernel to boot. It will load this from the boot media (or some other source depending on system configuration) and place it in the RAM. It will also place some boot parameters in memory for the kernel to read when it starts up.&lt;br /&gt;    * E. Once the boot loader is done it will perform a jump to the Linux kernel, usually some decompression routine, and the kernel assumes system responsibility.&lt;br /&gt;&lt;br /&gt;3. The Linux kernel&lt;br /&gt;The Linux kernel starts up in a similar way on Android as on other systems. It will set up everything that is needed for the system to run. Initialize interrupt controllers, set up memory protections, caches and scheduling.&lt;br /&gt;&lt;br /&gt;    * A. Once the memory management units and caches have been initialized the system will be able to use virtual memory and launch user space processes.&lt;br /&gt;    * B. The kernel will look in the root file system for the init process (found under system/core/init in the Android open source tree) and launch it as the initial user space process.&lt;br /&gt;&lt;br /&gt;4. The init process&lt;br /&gt;The init process is the "grandmother" of all system processes. Every other process in the system will be launched from this process or one of its descendants.&lt;br /&gt;&lt;br /&gt;    * A. The init process in Android will look for a file called init.rc. This is a script that describes the system services, file system and other parameters that need to be set up. The init.rc script is placed in system/core/rootdir in the Android open source project.&lt;br /&gt;    * B. The init process will parse the init script and launch the system service processes.&lt;br /&gt;&lt;br /&gt;5. Zygote and Dalvik&lt;br /&gt;The Zygote is launched by the init process and will basically just start executing and and initialize the Dalvik VM.&lt;br /&gt;6. The system server&lt;br /&gt;The system server is the first java component to run in the system. It will start all the Android services such as telephony manager and bluetooth. Start up of each service is currently written directly into the run method of the system server. The system server source can be found in the file frameworks/base/services/java/com/android/server/SystemServer.java in the open source project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. Boot completed&lt;br /&gt;Added this part to the post on 20090831 since it is very useful and something I should not have left out from the beginning. Once the System Server is up and running and the system boot has completed there is a standard broadcast action called ACTION_BOOT_COMPLETED. To start your own service, register an alarm or otherwise make your application perform some action after boot you should register to receive this broadcast intent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1406414457216119239?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1406414457216119239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/android-boot-process-from-power-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1406414457216119239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1406414457216119239'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/12/android-boot-process-from-power-on.html' title='The Android boot process from power on'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8969617865278643770</id><published>2009-10-12T05:07:00.000-07:00</published><updated>2009-10-12T05:16:16.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android maps location manager'/><title type='text'>Location Manager Examples</title><content type='html'>Here theres is a small program regarding location manager and location class&lt;br /&gt;&lt;br /&gt;package com.vinnysoft.ami;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Locale;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.location.Address;&lt;br /&gt;import android.location.Criteria;&lt;br /&gt;import android.location.Geocoder;&lt;br /&gt;import android.location.Location;&lt;br /&gt;import android.location.LocationListener;&lt;br /&gt;import android.location.LocationManager;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class WhereAmI extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;       &lt;br /&gt;        LocationManager locationManager;&lt;br /&gt;        String context = Context.LOCATION_SERVICE;&lt;br /&gt;        locationManager = (LocationManager)getSystemService(context);&lt;br /&gt;       &lt;br /&gt;        Criteria crta = new Criteria();&lt;br /&gt;        crta.setAccuracy(Criteria.ACCURACY_FINE);&lt;br /&gt;        crta.setAltitudeRequired(false);&lt;br /&gt;        crta.setBearingRequired(false);&lt;br /&gt;        crta.setCostAllowed(true);&lt;br /&gt;        crta.setPowerRequirement(Criteria.POWER_LOW);&lt;br /&gt;        String provider = locationManager.getBestProvider(crta, true);&lt;br /&gt;       &lt;br /&gt;      //  String provider = LocationManager.GPS_PROVIDER;&lt;br /&gt;        Location location  = locationManager.getLastKnownLocation(provider);&lt;br /&gt;        updateWithNewLocation(location);&lt;br /&gt;   &lt;br /&gt;        locationManager.requestLocationUpdates(provider, 1000, 0, locationListener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private final LocationListener locationListener = new LocationListener()&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public void onLocationChanged(Location location) {&lt;br /&gt;            updateWithNewLocation(location);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public void onProviderDisabled(String provider) {&lt;br /&gt;            updateWithNewLocation(null);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public void onProviderEnabled(String provider) {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public void onStatusChanged(String provider, int status, Bundle extras) {&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;    };&lt;br /&gt;    private void updateWithNewLocation(Location location) {&lt;br /&gt;        String latLong;&lt;br /&gt;        TextView myLocation;&lt;br /&gt;        myLocation = (TextView) findViewById(R.id.myLocation);&lt;br /&gt;       &lt;br /&gt;        String addressString = "no address found";&lt;br /&gt;       &lt;br /&gt;        if(location!=null) {&lt;br /&gt;            double lat = location.getLatitude();&lt;br /&gt;            double lon = location.getLongitude();&lt;br /&gt;            latLong = "Lat:" + lat + "\nLong:" + lon;&lt;br /&gt;           &lt;br /&gt;            double lattitude = location.getLatitude();&lt;br /&gt;            double longitude = location.getLongitude();&lt;br /&gt;           &lt;br /&gt;            Geocoder gc = new Geocoder(this,Locale.getDefault());&lt;br /&gt;            try {&lt;br /&gt;                List&lt;address&gt; addresses= gc.getFromLocation(lattitude, longitude, 1);&lt;br /&gt;                StringBuilder sb = new StringBuilder();&lt;br /&gt;                if(addresses.size()&gt;0) {&lt;br /&gt;                    Address address = addresses.get(0);&lt;br /&gt;                    for(int i =0;i&lt;address.getMaxAddressLineIndex();i++){&lt;br /&gt;                        sb.append(address.getAddressLine(i)).append("\n");&lt;br /&gt;                        sb.append(address.getLocality()).append("\n");&lt;br /&gt;                        sb.append(address.getPostalCode()).append("\n");&lt;br /&gt;                        sb.append(address.getCountryName());&lt;br /&gt;                    }&lt;br /&gt;                    addressString = sb.toString();&lt;br /&gt;                }&lt;br /&gt;            }catch (Exception e) {&lt;br /&gt;            }&lt;br /&gt;        } else {&lt;br /&gt;            latLong = " NO Location Found ";&lt;br /&gt;        }&lt;br /&gt;        myLocation.setText("your Current Position is :\n" +latLong + "\n " + addressString );&lt;br /&gt;    }   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;add mapview in main.xml file&lt;br /&gt;&lt;br /&gt;give the permission sin android manifest file&lt;br /&gt;&lt;br /&gt; &lt;uses-permission name="android.permission.INTERNET"&gt;&lt;br /&gt;       &lt;uses-permission name="android.permission.ACCESS_FINE_LOCATION"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8969617865278643770?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8969617865278643770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/10/location-manager-examples.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8969617865278643770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8969617865278643770'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/10/location-manager-examples.html' title='Location Manager Examples'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-7959394303537409103</id><published>2009-09-02T03:04:00.001-07:00</published><updated>2009-09-02T03:18:31.393-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shell sqlite android'/><title type='text'>Creating databases from SQLite shell</title><content type='html'>&lt;span style="font-size:78%;"&gt;&lt;span id="ctl00_cphCenter_TOC"&gt;&lt;h1&gt; A simple file &lt;/h1&gt;&lt;h3&gt; Code Listing 1. Creating a contacts database &lt;/h3&gt;&lt;h1&gt; The Created DB file &lt;/h1&gt;&lt;h3&gt; Code Listing 2. The SQLite db file &lt;/h3&gt;&lt;h1&gt; How does it related to other DBMSs? &lt;/h1&gt;&lt;h3&gt; Code Listing 3. The API used for creating an SQLite db &lt;/h3&gt;&lt;h1&gt; Creating database from the Android Shell &lt;/h1&gt;&lt;h2&gt; Attach to an Android device where you want to create the database &lt;/h2&gt;&lt;h3&gt; Code Listing 4. Attaching to an Android device &lt;/h3&gt;&lt;h2&gt; Move to a data directory &lt;/h2&gt;&lt;h3&gt; Code Listing 5. A directory for creating the databases &lt;/h3&gt;&lt;h2&gt; Go to the SQLite shell and create db &lt;/h2&gt;&lt;h2&gt; Create a table &lt;/h2&gt;&lt;h2&gt; The Created file &lt;/h2&gt;&lt;h2&gt; Reopen the database &lt;/h2&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;h1&gt; A simple file &lt;/h1&gt; &lt;p&gt; In SQLite, the database is stored in one file. Creating a database is as simple as passing the name of the file to the SQLite command line program (for example: sqlite3.exe). &lt;/p&gt; &lt;h3&gt; Code Listing 1. Creating a contacts database &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; D:\Research\sqlite\sqlite-3_5_7&gt;sqlite3 contactsext.db&lt;br /&gt;SQLite version 3.5.7&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;&lt;br /&gt;sqlite&gt; CREATE TABLE contactsext (_id INTEGER, name TEXT);&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;contactsext&lt;br /&gt;&lt;br /&gt;sqlite&gt; .exit&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; In the above code listing, sqlite3 is the command line program that can be downloaded from the SQLite site. I have installed (or ‘copied’/’unzipped’ the sqlite3.exe file into D:\Research\sqlite\... directory. When starting the program, contacts is provided as the parameter for the name of the database I would like to create. &lt;/p&gt; &lt;h1&gt; The Created DB file &lt;/h1&gt; &lt;p&gt; After the above command, if we look in the filesystem, we will see a contactsext.db file. &lt;/p&gt; &lt;h3&gt; Code Listing 2. The SQLite db file &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; Directory of D:\Research\sqlite\sqlite-3_5_7&lt;br /&gt;&lt;br /&gt;03/24/2008  11:19 AM             2,048 contactsext.db&lt;br /&gt;03/17/2008  02:48 PM           440,651 sqlite3.exe&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; As you can see above, the contactsext.db file is created in the directory. &lt;/p&gt; &lt;h1&gt; How does it related to other DBMSs? &lt;/h1&gt; &lt;p&gt; The above database creation is vastly simplified, when you compare it with the full-fledged DBMSs like SQLServer, Oracle, etc. For example, there we have a ‘CREATE DATABASE’ command, which lets us specify one or more database files. This command will also let us specify initial and maximum sizes for these files, as well as specifying the file growth. In addition to the database files (which hold the actual data), we can also specify the log files, which log various database related events and changes. &lt;/p&gt; &lt;p&gt; SQLite simplifies the database creation and none of the above options are available. Of course, the above method is for creating an SQLite database from the command prompt. You can also create a new db programmatically by using the function sqlite3_open() (or, other related functions) from the SQLite API. &lt;/p&gt; &lt;h3&gt; Code Listing 3. The API used for creating an SQLite db &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; SQLITE_API int sqlite3_open(&lt;br /&gt;  const char *filename,   /* Database filename (UTF-8) */&lt;br /&gt;  sqlite3 **ppDb          /* OUT: SQLite db handle */&lt;br /&gt;);&lt;br /&gt;SQLITE_API int sqlite3_open16(&lt;br /&gt;  const void *filename,   /* Database filename (UTF-16) */&lt;br /&gt;  sqlite3 **ppDb          /* OUT: SQLite db handle */&lt;br /&gt;);&lt;br /&gt;SQLITE_API int sqlite3_open_v2(&lt;br /&gt;  const char *filename,   /* Database filename (UTF-8) */&lt;br /&gt;  sqlite3 **ppDb,         /* OUT: SQLite db handle */&lt;br /&gt;  int flags,              /* Flags */&lt;br /&gt;  const char *zVfs        /* Name of VFS module to use */&lt;br /&gt;);&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h1&gt; Creating database from the Android Shell &lt;/h1&gt; &lt;p&gt; The above example uses creating SQLite database from a Windows Shell (‘DOS’ shell). The example below uses the Android shell to create an SQLite database. &lt;/p&gt; &lt;h2&gt; Attach to an Android device where you want to create the database &lt;/h2&gt; &lt;h3&gt; Code Listing 4. Attaching to an Android device &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; C:\Users\Administrator&gt;adb devices&lt;br /&gt;List of devices attached&lt;br /&gt;1       emulator-tcp-5555       device  0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\Users\Administrator&gt;adb -d 1 shell&lt;br /&gt;#&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; As shown above, first find out what Android devices are out there by using the ‘adb devices’ command. Then Attach to a particular device and start the shell on it (adb –d 1 shell). &lt;/p&gt; &lt;h2&gt; Move to a data directory &lt;/h2&gt; &lt;h3&gt; Code Listing 5. A directory for creating the databases &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; # pwd&lt;br /&gt;pwd&lt;br /&gt;/data/data/com.infinitezest.contactsext/databases&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; As an example, I have a contactsext application, which stores its data in the /data/data/&lt;app&gt;/databases directory. Now I am still in the Android/Linux/OS shell. &lt;/p&gt; &lt;h2&gt; Go to the SQLite shell and create db &lt;/h2&gt; &lt;p&gt; Just like before, opening the sqlite3 command line and creating a contactsext database takes one command. The version here (in Android) is slightly behind (3.5.7 vs. 3.5.0). That’s probably going to continue as it might take a bit of time before the latest SQLite is incorporated into Android. &lt;/p&gt; &lt;div class="code"&gt;&lt;p&gt; # sqlite3 contactsext.db&lt;br /&gt;sqlite3 contactsext.db&lt;br /&gt;SQLite version 3.5.0&lt;br /&gt;Enter ".help" for instructions &lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h2&gt; Create a table &lt;/h2&gt; &lt;p&gt; Then create a table and verify it has been created. &lt;/p&gt; &lt;div class="code"&gt;&lt;p&gt; sqlite&gt; CREATE TABLE contactsext (_id INTEGER, name TEXT);&lt;br /&gt;CREATE TABLE contactsext (_id INTEGER, name TEXT);&lt;br /&gt;&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;.tables&lt;br /&gt;contactsext&lt;br /&gt;&lt;br /&gt;sqlite&gt; select * from sqlite_master;&lt;br /&gt;select * from sqlite_master;&lt;br /&gt;table|contactsext|contactsext|2|CREATE TABLE contactsext (_id INTEGER, name TEXT&lt;br /&gt;) &lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h2&gt; The Created file &lt;/h2&gt; &lt;p&gt; Then get out of the SQLite shell to get back into the OS shell, and see that the contactsext.db file has been created. &lt;/p&gt; &lt;div class="code"&gt;&lt;p&gt; sqlite&gt; .exit&lt;br /&gt;.exit&lt;br /&gt;# ls -l&lt;br /&gt;ls -l&lt;br /&gt;-rw-r--r-- root     root         2048 2008-03-24 18:13 contactsext.db&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h2&gt; Reopen the database &lt;/h2&gt; &lt;p&gt; If you open the contactsext.db again, you will see the previous table in there. &lt;/p&gt; &lt;p&gt; # sqlite3 contactsext.db&lt;br /&gt;sqlite3 contactsext.db&lt;br /&gt;SQLite version 3.5.0&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;.tables&lt;br /&gt;contactsext &lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span id="ctl00_cphCenter_TOC"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-7959394303537409103?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/7959394303537409103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/09/creating-databases-from-sqlite-shell_02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7959394303537409103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/7959394303537409103'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/09/creating-databases-from-sqlite-shell_02.html' title='Creating databases from SQLite shell'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8031073981452737051</id><published>2009-09-02T03:04:00.000-07:00</published><updated>2009-09-02T03:18:29.753-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shell sqlite android'/><title type='text'>Creating databases from SQLite shell</title><content type='html'>&lt;span style="font-size:78%;"&gt;&lt;span id="ctl00_cphCenter_TOC"&gt;&lt;h1&gt; A simple file &lt;/h1&gt;&lt;h3&gt; Code Listing 1. Creating a contacts database &lt;/h3&gt;&lt;h1&gt; The Created DB file &lt;/h1&gt;&lt;h3&gt; Code Listing 2. The SQLite db file &lt;/h3&gt;&lt;h1&gt; How does it related to other DBMSs? &lt;/h1&gt;&lt;h3&gt; Code Listing 3. The API used for creating an SQLite db &lt;/h3&gt;&lt;h1&gt; Creating database from the Android Shell &lt;/h1&gt;&lt;h2&gt; Attach to an Android device where you want to create the database &lt;/h2&gt;&lt;h3&gt; Code Listing 4. Attaching to an Android device &lt;/h3&gt;&lt;h2&gt; Move to a data directory &lt;/h2&gt;&lt;h3&gt; Code Listing 5. A directory for creating the databases &lt;/h3&gt;&lt;h2&gt; Go to the SQLite shell and create db &lt;/h2&gt;&lt;h2&gt; Create a table &lt;/h2&gt;&lt;h2&gt; The Created file &lt;/h2&gt;&lt;h2&gt; Reopen the database &lt;/h2&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;h1&gt; A simple file &lt;/h1&gt; &lt;p&gt; In SQLite, the database is stored in one file. Creating a database is as simple as passing the name of the file to the SQLite command line program (for example: sqlite3.exe). &lt;/p&gt; &lt;h3&gt; Code Listing 1. Creating a contacts database &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; D:\Research\sqlite\sqlite-3_5_7&gt;sqlite3 contactsext.db&lt;br /&gt;SQLite version 3.5.7&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;&lt;br /&gt;sqlite&gt; CREATE TABLE contactsext (_id INTEGER, name TEXT);&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;contactsext&lt;br /&gt;&lt;br /&gt;sqlite&gt; .exit&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; In the above code listing, sqlite3 is the command line program that can be downloaded from the SQLite site. I have installed (or ‘copied’/’unzipped’ the sqlite3.exe file into D:\Research\sqlite\... directory. When starting the program, contacts is provided as the parameter for the name of the database I would like to create. &lt;/p&gt; &lt;h1&gt; The Created DB file &lt;/h1&gt; &lt;p&gt; After the above command, if we look in the filesystem, we will see a contactsext.db file. &lt;/p&gt; &lt;h3&gt; Code Listing 2. The SQLite db file &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; Directory of D:\Research\sqlite\sqlite-3_5_7&lt;br /&gt;&lt;br /&gt;03/24/2008  11:19 AM             2,048 contactsext.db&lt;br /&gt;03/17/2008  02:48 PM           440,651 sqlite3.exe&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; As you can see above, the contactsext.db file is created in the directory. &lt;/p&gt; &lt;h1&gt; How does it related to other DBMSs? &lt;/h1&gt; &lt;p&gt; The above database creation is vastly simplified, when you compare it with the full-fledged DBMSs like SQLServer, Oracle, etc. For example, there we have a ‘CREATE DATABASE’ command, which lets us specify one or more database files. This command will also let us specify initial and maximum sizes for these files, as well as specifying the file growth. In addition to the database files (which hold the actual data), we can also specify the log files, which log various database related events and changes. &lt;/p&gt; &lt;p&gt; SQLite simplifies the database creation and none of the above options are available. Of course, the above method is for creating an SQLite database from the command prompt. You can also create a new db programmatically by using the function sqlite3_open() (or, other related functions) from the SQLite API. &lt;/p&gt; &lt;h3&gt; Code Listing 3. The API used for creating an SQLite db &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; SQLITE_API int sqlite3_open(&lt;br /&gt;  const char *filename,   /* Database filename (UTF-8) */&lt;br /&gt;  sqlite3 **ppDb          /* OUT: SQLite db handle */&lt;br /&gt;);&lt;br /&gt;SQLITE_API int sqlite3_open16(&lt;br /&gt;  const void *filename,   /* Database filename (UTF-16) */&lt;br /&gt;  sqlite3 **ppDb          /* OUT: SQLite db handle */&lt;br /&gt;);&lt;br /&gt;SQLITE_API int sqlite3_open_v2(&lt;br /&gt;  const char *filename,   /* Database filename (UTF-8) */&lt;br /&gt;  sqlite3 **ppDb,         /* OUT: SQLite db handle */&lt;br /&gt;  int flags,              /* Flags */&lt;br /&gt;  const char *zVfs        /* Name of VFS module to use */&lt;br /&gt;);&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h1&gt; Creating database from the Android Shell &lt;/h1&gt; &lt;p&gt; The above example uses creating SQLite database from a Windows Shell (‘DOS’ shell). The example below uses the Android shell to create an SQLite database. &lt;/p&gt; &lt;h2&gt; Attach to an Android device where you want to create the database &lt;/h2&gt; &lt;h3&gt; Code Listing 4. Attaching to an Android device &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; C:\Users\Administrator&gt;adb devices&lt;br /&gt;List of devices attached&lt;br /&gt;1       emulator-tcp-5555       device  0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\Users\Administrator&gt;adb -d 1 shell&lt;br /&gt;#&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; As shown above, first find out what Android devices are out there by using the ‘adb devices’ command. Then Attach to a particular device and start the shell on it (adb –d 1 shell). &lt;/p&gt; &lt;h2&gt; Move to a data directory &lt;/h2&gt; &lt;h3&gt; Code Listing 5. A directory for creating the databases &lt;/h3&gt; &lt;div class="code"&gt;&lt;p&gt; # pwd&lt;br /&gt;pwd&lt;br /&gt;/data/data/com.infinitezest.contactsext/databases&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt; As an example, I have a contactsext application, which stores its data in the /data/data/&lt;app&gt;/databases directory. Now I am still in the Android/Linux/OS shell. &lt;/p&gt; &lt;h2&gt; Go to the SQLite shell and create db &lt;/h2&gt; &lt;p&gt; Just like before, opening the sqlite3 command line and creating a contactsext database takes one command. The version here (in Android) is slightly behind (3.5.7 vs. 3.5.0). That’s probably going to continue as it might take a bit of time before the latest SQLite is incorporated into Android. &lt;/p&gt; &lt;div class="code"&gt;&lt;p&gt; # sqlite3 contactsext.db&lt;br /&gt;sqlite3 contactsext.db&lt;br /&gt;SQLite version 3.5.0&lt;br /&gt;Enter ".help" for instructions &lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h2&gt; Create a table &lt;/h2&gt; &lt;p&gt; Then create a table and verify it has been created. &lt;/p&gt; &lt;div class="code"&gt;&lt;p&gt; sqlite&gt; CREATE TABLE contactsext (_id INTEGER, name TEXT);&lt;br /&gt;CREATE TABLE contactsext (_id INTEGER, name TEXT);&lt;br /&gt;&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;.tables&lt;br /&gt;contactsext&lt;br /&gt;&lt;br /&gt;sqlite&gt; select * from sqlite_master;&lt;br /&gt;select * from sqlite_master;&lt;br /&gt;table|contactsext|contactsext|2|CREATE TABLE contactsext (_id INTEGER, name TEXT&lt;br /&gt;) &lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h2&gt; The Created file &lt;/h2&gt; &lt;p&gt; Then get out of the SQLite shell to get back into the OS shell, and see that the contactsext.db file has been created. &lt;/p&gt; &lt;div class="code"&gt;&lt;p&gt; sqlite&gt; .exit&lt;br /&gt;.exit&lt;br /&gt;# ls -l&lt;br /&gt;ls -l&lt;br /&gt;-rw-r--r-- root     root         2048 2008-03-24 18:13 contactsext.db&lt;br /&gt;&lt;/p&gt;&lt;/div&gt; &lt;h2&gt; Reopen the database &lt;/h2&gt; &lt;p&gt; If you open the contactsext.db again, you will see the previous table in there. &lt;/p&gt; &lt;p&gt; # sqlite3 contactsext.db&lt;br /&gt;sqlite3 contactsext.db&lt;br /&gt;SQLite version 3.5.0&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;.tables&lt;br /&gt;contactsext &lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span id="ctl00_cphCenter_TOC"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8031073981452737051?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8031073981452737051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/09/creating-databases-from-sqlite-shell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8031073981452737051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8031073981452737051'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/09/creating-databases-from-sqlite-shell.html' title='Creating databases from SQLite shell'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3221556093774623650</id><published>2009-08-27T07:26:00.000-07:00</published><updated>2009-08-27T07:27:26.348-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zoom android'/><title type='text'>Zooming the ImageView</title><content type='html'>For Zooming the ImageView Here is the snippet :&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;public class Zoom extends View {&lt;/div&gt;&lt;div&gt;     private Drawable image;&lt;/div&gt;&lt;div&gt;     private int zoomControler=200;&lt;/div&gt;&lt;div&gt;     public Zoom(Context context)&lt;/div&gt;&lt;div&gt;     {&lt;/div&gt;&lt;div&gt;          super(context);&lt;/div&gt;&lt;div&gt;          image=context.getResources().getDrawable(R.drawable.gallery_photo_1);&lt;/div&gt;&lt;div&gt;          setFocusable(true);&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;     }&lt;/div&gt;&lt;div&gt;     @Override&lt;/div&gt;&lt;div&gt;     protected void onDraw(Canvas canvas) {&lt;/div&gt;&lt;div&gt;          super.onDraw(canvas);&lt;/div&gt;&lt;div&gt;     //here u can control the width and height of the images........ this line is very important&lt;/div&gt;&lt;div&gt;     image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);&lt;/div&gt;&lt;div&gt;          image.draw(canvas);&lt;/div&gt;&lt;div&gt;     }&lt;/div&gt;&lt;div&gt;     @Override&lt;/div&gt;&lt;div&gt;     public boolean onKeyDown(int keyCode, KeyEvent event) {&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;          if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in&lt;/div&gt;&lt;div&gt;               zoomControler+=10;&lt;/div&gt;&lt;div&gt;          if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out&lt;/div&gt;&lt;div&gt;               zoomControler-=10;&lt;/div&gt;&lt;div&gt;          if(zoomControler&lt;10)&lt;/div&gt;&lt;div&gt;               zoomControler=10;&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;          invalidate();&lt;/div&gt;&lt;div&gt;          return true;&lt;/div&gt;&lt;div&gt;     }&lt;/div&gt;&lt;div&gt;} &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If any body knows the other way they can post here it should be helpful for others to develop.....&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3221556093774623650?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3221556093774623650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/zooming-imageview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3221556093774623650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3221556093774623650'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/zooming-imageview.html' title='Zooming the ImageView'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3885030395775795436</id><published>2009-08-27T00:52:00.000-07:00</published><updated>2009-08-27T00:59:44.165-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android webview'/><title type='text'>WebView in Android :</title><content type='html'>Web View In Android :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.html#getSettings%28%29"&gt;WebViewclassOverview&lt;/a&gt; click here to see the webview class details .&lt;br /&gt;&lt;br /&gt;Here i am pasting the small example over webview implementation&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package com.vinnysoft.webkit;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.Gravity;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.ViewGroup;&lt;br /&gt;import android.webkit.WebView;&lt;br /&gt;import android.widget.FrameLayout;&lt;br /&gt;&lt;br /&gt;public class WebSample extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;      private static final FrameLayout.LayoutParams ZOOM_PARAMS =&lt;br /&gt;            new FrameLayout.LayoutParams(&lt;br /&gt;              ViewGroup.LayoutParams.FILL_PARENT,&lt;br /&gt;              ViewGroup.LayoutParams.WRAP_CONTENT,&lt;br /&gt;              Gravity.BOTTOM);&lt;br /&gt;    private  WebView wv;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle icicle) {&lt;br /&gt;    super.onCreate(icicle);&lt;br /&gt;     this.setContentView(R.layout.main);&lt;br /&gt;        this.wv = (WebView) this.findViewById(R.id.webview);&lt;br /&gt;&lt;br /&gt;        FrameLayout mContentView = (FrameLayout) getWindow().&lt;br /&gt;          getDecorView().findViewById(android.R.id.content);&lt;br /&gt;        final View zoom = this.wv.getZoomControls();&lt;br /&gt;        mContentView.addView(zoom, ZOOM_PARAMS);&lt;br /&gt;        zoom.setVisibility(View.GONE);&lt;br /&gt;&lt;br /&gt;        this.wv.loadUrl("http://imageurl.com/1.jpg");&lt;br /&gt;&lt;br /&gt; // for example  this.wv.loadUrl("http://news.softpedia.com/newsImage/RIM-Announces-BlackBerry-JDE-Plug-in-for-Eclipse-3.JPG");&lt;br /&gt;&lt;br /&gt;like this example ....&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;In the res folder make the layout like this create a webview widget over there&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &gt;&lt;br /&gt;&lt;WebView&lt;br /&gt;        android:id="@+id/webview"&lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_height="fill_parent"&lt;br /&gt;        android:layout_weight="1"&lt;br /&gt;        /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/linearlayout&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3885030395775795436?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3885030395775795436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/webview-in-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3885030395775795436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3885030395775795436'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/webview-in-android.html' title='WebView in Android :'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-2045467838689766481</id><published>2009-08-26T08:37:00.000-07:00</published><updated>2009-08-26T08:43:05.700-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android layout main'/><title type='text'>XML Layout in Java</title><content type='html'>Write Layouts in Java :&lt;br /&gt;&lt;br /&gt;This is the file which help how to write eidgets in java file and instaniate there it self....&lt;br /&gt;&lt;br /&gt;package com.vinnysoft.hello;&lt;br /&gt;&lt;br /&gt;import com.vinnysoft.hello.R;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.ViewGroup.LayoutParams;&lt;br /&gt;import android.widget.LinearLayout;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class HelloWorld extends Activity {&lt;br /&gt;&lt;br /&gt;  // TextView that will be assigned to the&lt;br /&gt;  // TextView resource when it's inflated or&lt;br /&gt;  // created in code.&lt;br /&gt;  TextView myTextView;&lt;br /&gt; &lt;br /&gt;  // Variable used to determine if the layout&lt;br /&gt;  // should be inflated from XML or constructed&lt;br /&gt;  // in code.&lt;br /&gt;  private static boolean inflate = true;&lt;br /&gt; &lt;br /&gt;  /** Called when the activity is first created. */&lt;br /&gt;  @Override&lt;br /&gt;  public void onCreate(Bundle icicle) {&lt;br /&gt;    super.onCreate(icicle);&lt;br /&gt;   &lt;br /&gt;    if (inflate)&lt;br /&gt;      inflateXMLLayout();&lt;br /&gt;    else&lt;br /&gt;      constructLayout();   &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // Use the 'main.xml' layout resource to create&lt;br /&gt;  // the UI for this Activity.&lt;br /&gt;  private void inflateXMLLayout() {&lt;br /&gt;    setContentView(R.layout.main);&lt;br /&gt;    myTextView = (TextView)findViewById(R.id.myTextView);   &lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // Create the Activity's UI layout by creating&lt;br /&gt;  // and populating the layout in code.&lt;br /&gt;  private void constructLayout() {&lt;br /&gt;    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);&lt;br /&gt;    LinearLayout.LayoutParams textViewLP = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);&lt;br /&gt;&lt;br /&gt;    LinearLayout ll = new LinearLayout(this);&lt;br /&gt;    ll.setOrientation(LinearLayout.VERTICAL);&lt;br /&gt;    myTextView = new TextView(this);&lt;br /&gt;    myTextView.setText("Hello World, HelloWorld");&lt;br /&gt;    ll.addView(myTextView, textViewLP);&lt;br /&gt;    addContentView(ll, lp);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Androidmanifest file for the Programs ...&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;// application package&lt;br /&gt;&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;          package="com.vinnysoft.hello"&gt;&lt;br /&gt;  // application icon path&lt;br /&gt;  &lt;application icon="@drawable/icon"&gt;&lt;br /&gt;//application activity permission with lable name&lt;br /&gt;    &lt;activity name=".HelloWorld" label="@string/app_name"&gt;&lt;br /&gt;// intent filter what we need to launch&lt;br /&gt;      &lt;intent-filter&gt;&lt;br /&gt;        &lt;action name="android.intent.action.MAIN"&gt;&lt;br /&gt;        &lt;category name="android.intent.category.LAUNCHER"&gt;&lt;br /&gt;      &lt;/intent-filter&gt;&lt;br /&gt;    &lt;/activity&gt;&lt;br /&gt;  &lt;/application&gt;&lt;br /&gt;&lt;/manifest&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-2045467838689766481?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/2045467838689766481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/xml-layout-in-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/2045467838689766481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/2045467838689766481'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/xml-layout-in-java.html' title='XML Layout in Java'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-1700618582628485265</id><published>2009-08-26T08:31:00.000-07:00</published><updated>2009-08-26T08:34:16.596-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emulator internet'/><title type='text'>Proxy setting</title><content type='html'>To get the internet in emulator type the follow commands on sdk tools path .&lt;br /&gt;&lt;br /&gt;// Proxy Settings&lt;br /&gt;&lt;br /&gt;Open&lt;br /&gt;&lt;br /&gt;Cd :\sdk\tools&lt;br /&gt;&lt;br /&gt;adb shell&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ls -l /data/data/com.android.providers.settings/databases/settings.db&lt;br /&gt;&lt;br /&gt;sqlite3 /data/data/com.android.providers.settings/databases/settings.db&lt;br /&gt;&lt;br /&gt;Open the databases&lt;br /&gt;&lt;br /&gt;.databases&lt;br /&gt;&lt;br /&gt;Show the tables&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.tables&lt;br /&gt;&lt;br /&gt;setting the proxy permission&lt;br /&gt;&lt;br /&gt;insert into system values(99,'http_proxy','Server  Address :Port Number');&lt;br /&gt;&lt;br /&gt;insert into system values(99,'http_proxy','192.1.1.1:22');&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;insert into system values(101,'http_proxy','192.1.1.1:22');&lt;br /&gt;&lt;br /&gt;Enjoy the Internet in Emulator&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-1700618582628485265?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/1700618582628485265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/proxy-setting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1700618582628485265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/1700618582628485265'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/proxy-setting.html' title='Proxy setting'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-3144492576742044507</id><published>2009-08-26T07:23:00.000-07:00</published><updated>2009-08-26T07:28:35.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adb commands'/><title type='text'>ADB Commands:</title><content type='html'>What is ADB?&lt;br /&gt;&lt;br /&gt;Android Debugger Bridge....&lt;br /&gt;&lt;br /&gt;Commands where i collected and used i am posting here for helpful to others...&lt;br /&gt;&lt;br /&gt;// installing apk in system&lt;br /&gt;&lt;br /&gt;adb install filename.apk&lt;br /&gt;&lt;br /&gt;adb kill-server&lt;br /&gt;adb start-server&lt;br /&gt;&lt;br /&gt;adb devices  // to get what are the devices running or attached&lt;br /&gt;&lt;br /&gt;to uninstall the apk...&lt;br /&gt;&lt;br /&gt;adb uninstall packagename.apk&lt;br /&gt;&lt;br /&gt;To access the data bases and seeing the data in the content providers:&lt;br /&gt;&lt;br /&gt;here one small example to open the content providers contacts&lt;br /&gt;&lt;br /&gt;adb shell&lt;br /&gt;&lt;br /&gt;# cd /data/data&lt;br /&gt;&lt;br /&gt;# cd com.google.android.providers.contacts/databases&lt;br /&gt;&lt;br /&gt;# ls&lt;br /&gt;&lt;br /&gt;contacts.db&lt;br /&gt;&lt;br /&gt;# sqlite3 contacts.db     # it's picky you must include suffix&lt;br /&gt;SQLite version 3.5.0&lt;br /&gt;&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;_deleted_people       android_metadata      people             &lt;br /&gt;_sync_state           calls                 peopleLookup       &lt;br /&gt;_sync_state_metadata  contact_methods       phones  &lt;br /&gt;          &lt;br /&gt;sqlite&gt; select * from people;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;provider class=".SimpleStringDataProvider"&lt;br /&gt;                    android:authorities="aexp.syncexample.SimpleString"&lt;br /&gt;                    android:syncable="true"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for modification or inserting&lt;br /&gt;&lt;br /&gt;sqlite&gt;.dump&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-3144492576742044507?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/3144492576742044507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/adb-commands.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3144492576742044507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/3144492576742044507'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/adb-commands.html' title='ADB Commands:'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5825086013565955427.post-8440369992130445989</id><published>2009-08-14T03:14:00.000-07:00</published><updated>2009-08-14T03:22:30.593-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android Soundpoolmanager'/><title type='text'>Sound Pool Manager Class</title><content type='html'>Here I am posting  the Sound Pool Manager Class for playing the Sounds and Music from the resources.....&lt;br /&gt;&lt;br /&gt;SoundPoolManager Class&lt;br /&gt;&lt;br /&gt;package com.vinnysoft.music;&lt;br /&gt;import android.media.SoundPool;&lt;br /&gt;import android.media.JetPlayer;&lt;br /&gt;class SoundPoolEvent&lt;br /&gt;{&lt;br /&gt;    public SoundPoolEvent(int eventType,int eventSound)&lt;br /&gt;    {&lt;br /&gt;        this.eventType = eventType;&lt;br /&gt;        this.eventSound = eventSound;&lt;br /&gt;    }&lt;br /&gt;    public int eventType;&lt;br /&gt;    public int eventSound;&lt;br /&gt;   &lt;br /&gt;    public static final int SOUND_PLAY=0;&lt;br /&gt;    public static final int SOUND_STOP=1;&lt;br /&gt;    public static final int SOUND_MUSIC_PLAY=2;&lt;br /&gt;    public static final int SOUND_MUSIC_PAUSE=3;&lt;br /&gt;    public static final int SOUND_MUSIC_STOP=4;&lt;br /&gt;    public static final int SOUND_MUSIC_RESUME=5;&lt;br /&gt;}&lt;br /&gt;class SoundStatus&lt;br /&gt;{&lt;br /&gt;    public SoundStatus()&lt;br /&gt;    {&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;    public static final int STATUS_LOOPING_NOT_STARTED=0;&lt;br /&gt;    public static final int STATUS_LOOPING_PAUSED=1;&lt;br /&gt;    public static final int STATUS_LOOPING_PLAYING=2;&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;public class SoundPoolManager implements Sound&lt;br /&gt;{&lt;br /&gt;    SoundPoolManager(android.content.Context context)&lt;br /&gt;    {&lt;br /&gt;        this.context = context;&lt;br /&gt;        soundEvents = new java.util.LinkedList&lt;soundpoolevent&gt;();&lt;br /&gt;        sounds = new java.util.HashMap&lt;integer,&gt;();&lt;br /&gt;        handles = new java.util.HashMap&lt;integer,&gt;();&lt;br /&gt;        streamIds =  new java.util.HashMap&lt;integer,&gt;();&lt;br /&gt;        isRunning = false;&lt;br /&gt;        finished = false;&lt;br /&gt;        this.musicPlayer =JetPlayer.getJetPlayer();&lt;br /&gt;        this.musicPlayer.loadJetFile(context.getResources().openRawResourceFd(R.raw.notify));&lt;br /&gt;        byte segmentId = 0;&lt;br /&gt;&lt;br /&gt;        this.musicPlayer.queueJetSegment(0, -1, -1, 0, 0, segmentId++);&lt;br /&gt;    }&lt;br /&gt;    public void addSound(int resid, boolean isLooping)&lt;br /&gt;    {&lt;br /&gt;       &lt;br /&gt;        sounds.put(resid, new Boolean(isLooping));&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public void startSound()&lt;br /&gt;    {&lt;br /&gt;        this.soundPool = new android.media.SoundPool(this.sounds.size(),android.media.AudioManager.STREAM_MUSIC,100);&lt;br /&gt;        java.util.Iterator &lt;integer&gt; iterator = sounds.keySet().iterator();&lt;br /&gt;       &lt;br /&gt;        while(iterator.hasNext())&lt;br /&gt;        {&lt;br /&gt;            int soundid = iterator.next().intValue();&lt;br /&gt;            int soundhandle = this.soundPool.load(this.context, soundid, 1);&lt;br /&gt;            handles.put(new Integer(soundid), new Integer(soundhandle));&lt;br /&gt;        }&lt;br /&gt;               &lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    public void stopSound()&lt;br /&gt;    {&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            java.util.Iterator &lt;integer&gt; iterator = sounds.keySet().iterator();&lt;br /&gt;       &lt;br /&gt;            while(iterator.hasNext())&lt;br /&gt;            {&lt;br /&gt;               &lt;br /&gt;                int soundid = iterator.next().intValue();&lt;br /&gt;&lt;br /&gt;                this.soundPool.pause( this.handles.get(soundid).intValue());&lt;br /&gt;                this.soundPool.stop(this.handles.get(soundid).intValue());&lt;br /&gt;                   &lt;br /&gt;               &lt;br /&gt;               &lt;br /&gt;            }       &lt;br /&gt;        }&lt;br /&gt;        catch(Exception e)&lt;br /&gt;        {&lt;br /&gt;           &lt;br /&gt;        }&lt;br /&gt;        finally&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                this.musicPlayer.pause();&lt;br /&gt;            }&lt;br /&gt;            catch(Exception e1)&lt;br /&gt;            {&lt;br /&gt;               &lt;br /&gt;            }&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                this.musicPlayer.release();&lt;br /&gt;            }&lt;br /&gt;            catch(Exception e2)&lt;br /&gt;            {&lt;br /&gt;               &lt;br /&gt;            }&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                this.soundPool.release();&lt;br /&gt;            }&lt;br /&gt;            catch(Exception e3)&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;    public int currentPlayer;&lt;br /&gt;    private boolean isRunning;&lt;br /&gt;    private java.util.HashMap&lt;integer,&gt; sounds;&lt;br /&gt;    private java.util.HashMap&lt;integer,&gt; handles;&lt;br /&gt;    private java.util.HashMap&lt;integer,&gt; streamIds;&lt;br /&gt;    private android.content.Context context;&lt;br /&gt;    private java.util.LinkedList&lt;soundpoolevent&gt; soundEvents;&lt;br /&gt;    private java.util.HashMap&lt;integer,&gt; mediaPlayers;&lt;br /&gt;    public void stopSound(int resid)&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    public void playSound(int resid)&lt;br /&gt;    {&lt;br /&gt;        if(soundEvents!=null)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                android.media.AudioManager mgr = (android.media.AudioManager) context.getSystemService(android.content.Context.AUDIO_SERVICE);&lt;br /&gt;                int streamVolume = mgr.getStreamVolume(android.media.AudioManager.STREAM_MUSIC);&lt;br /&gt;                int streamID = soundPool.play(handles.get( resid).intValue(), streamVolume, streamVolume, 1, 0, 1.0f);&lt;br /&gt;                int maxvolume = mgr.getStreamMaxVolume(android.media.AudioManager.STREAM_MUSIC);&lt;br /&gt;                mgr.setStreamVolume(android.media.AudioManager.STREAM_MUSIC, maxvolume, 0);&lt;br /&gt;                this.streamIds.put(resid, streamID);&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;            catch(Exception e)&lt;br /&gt;            {&lt;br /&gt;               &lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    public void startMusic(int resid)&lt;br /&gt;    {&lt;br /&gt;       &lt;br /&gt;        this.musicPlayer.play();   &lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;    public void stopMusic(int resid)&lt;br /&gt;    {&lt;br /&gt;        this.musicPlayer.pause();   &lt;br /&gt;    }&lt;br /&gt;    public void pauseMusic(int resid)&lt;br /&gt;    {&lt;br /&gt;        this.musicPlayer.pause();&lt;br /&gt;    }&lt;br /&gt;    public void resumeMusic(int resid)&lt;br /&gt;    {&lt;br /&gt;        this.musicPlayer.play();&lt;br /&gt;    }&lt;br /&gt;    SoundPool soundPool;&lt;br /&gt;    JetPlayer musicPlayer;&lt;br /&gt;   &lt;br /&gt;    boolean finished = false;&lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And add the interface of Sound..... to the above package&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package com.vinnysoft.music;&lt;br /&gt;&lt;br /&gt;public interface Sound {&lt;br /&gt;   &lt;br /&gt;    public void addSound(int resid, boolean isLooping);&lt;br /&gt;    public void startSound();&lt;br /&gt;    public void stopSound();&lt;br /&gt;    public void stopSound(int resid);&lt;br /&gt;    public void playSound(int resid);&lt;br /&gt;    public void startMusic(int resid);&lt;br /&gt;    public void stopMusic(int resid);&lt;br /&gt;    public void pauseMusic(int resid);&lt;br /&gt;    public void resumeMusic(int resid);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And u can use in difffernt ways ....&lt;br /&gt;&lt;br /&gt;1. creating the soundpoolmanager instance class ......&lt;br /&gt;2. by using Sound interface instance,....&lt;br /&gt;&lt;br /&gt;&lt;code&gt;SoundPoolManager m = new SoundPoolManager(context);&lt;br /&gt;m.addSound(R.raw.vinny, false);&lt;br /&gt;m.addSound(R.raw.soft,true);&lt;br /&gt;m.startSound();&lt;br /&gt;m.playSound(R.raw.vinny);&lt;br /&gt;m.playMusic(R.raw.soft);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt; private Sound soundManager;&lt;br /&gt;&lt;br /&gt;   soundManager.playSound(R.raw.vinny);&lt;br /&gt;&lt;br /&gt;    Log.i("**********","kshasjklgfjkas");&lt;br /&gt;&lt;br /&gt;   public synchronized void stopMusic()&lt;br /&gt;    {&lt;br /&gt;        soundManager.stopSound();&lt;br /&gt;&lt;br /&gt;        //message.sendToTarget(); &lt;br /&gt;        this.soundManager.stopSound();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By the above class you can play the music and sounds calling the above snippet....&lt;br /&gt;&lt;br /&gt;for more details go through this example:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/monolithandroid"&gt;http://code.google.com/p/monolithandroid&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5825086013565955427-8440369992130445989?l=vinnysoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinnysoft.blogspot.com/feeds/8440369992130445989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/sound-pool-manager-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8440369992130445989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5825086013565955427/posts/default/8440369992130445989'/><link rel='alternate' type='text/html' href='http://vinnysoft.blogspot.com/2009/08/sound-pool-manager-class.html' title='Sound Pool Manager Class'/><author><name>Vinod</name><uri>http://www.blogger.com/profile/01348260816444824413</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_Tl3DQoft6cw/SoKl_798tXI/AAAAAAAAAM0/sDWyzcxmdwQ/S220/iphone-vs-android.jpg'/></author><thr:total>0</thr:total></entry></feed>
