Jul
9
Android App: Simple Kiosk Browser
13 years ago, mid-July | 36 Comments
Kiosk Browser, is as its name suggests, a browser that acts like a kiosk.
You can limit the browser to a specific site or allow external sites to be loaded, optionally in the default standard browser. The browser has some additional features allowing the sending of Toast messages to the user from javascript, showing and hiding the title bar and launching applications on the device.
These special functions available from Javascript are demonstrated by the code below:
<input type="button" value="Show Preferences screen" onClick="Kiosk.showPreferences(); return false;" /> <input type="button" value="Show Platform Settings" onClick="Kiosk.platformSettings(); return false;" /> <input type="button" value="Clear cache, form data, history" onClick="Kiosk.clearCaches(); return false;" /> <input type="text" size=30 name=something> <br> <input type="button" value="Back" onClick="Kiosk.goBack(); return false;" /> <input type="button" value="Forward" onClick="Kiosk.goForward(); return false;" /> <input type="button" value="Reload" onClick="Kiosk.reload(); return false;" /> <input type="button" value="Stop" onClick="Kiosk.stop(); return false;" /> <input type="button" value="Disable Menus" onClick="Kiosk.disableMenus(); return false;" /> <input type="button" value="Enable Menus" onClick="Kiosk.enableMenus(); return false;" /> <input type="button" value="Disable Scaling" onClick="Kiosk.disableScaling(); return false;" /> <input type="button" value="Enable Scaling" onClick="Kiosk.enableScaling(); return false;" /> <input type="submit" value="Android app interface" onClick="Kiosk.showToast('Hello Android!'); return false;" > <input type="button" value="Fullscreen" onClick="Kiosk.hideTitlebar(); return false;" > <input type="button" value="With title" onClick="Kiosk.showTitlebar(); return false;" > <input type="button" value="Restart" onClick="Kiosk.endApp(); return false;" > <input type="button" value="Launch" onClick="Kiosk.launch('fm.last.android','fm.last.android.LastFm'); return false;" > <input type="button" value="Launch 2" onClick="Kiosk.launch('fm.last.android-1','fm.last.android-1.activity.Profile_RadioTab'); return false;" > <a href=http://www.google.co.uk>External</a> |
UPDATE: 04-November-2011: Added more javascript interfaces and preferences… (sorry about the 2 updates in one go) Second update allows for zoom to be set from 1 to 200
UPDATE: 29-October-2011: Rearranged some of the options to make preferences a little less messy.
Added an optional “Page Loading” message, this blocks screen access until the page has completely loaded so be aware that it may just sit there forever if your network drops out. The good news is the addition of the labs section may help here.
Also added a ‘Labs’ preference section where experimental stuff can go. Currently there’s one active preference in there called “Network Connect”. What this does is run the kiosk application when the network goes up or down. What this means is that you can have the kiosk automatically run when the device boots (and gets unlocked). Feedback on how useful it is would be useful 😀
Seems I’ve managed to mess up the comments section :/
Some simple documentation is available here
There’s also some information on the next iteration of Kiosk Browser
Tagged with: android • kiosk • software
July 9, 2011 15:14
May
20
Widget, it’s got a widget…
13 years ago, mid-May | Leave a Comment
John Smiths have a lot to answer for there I can tell you.
It’s been a busy few weeks at work while we launch our revamped online shop and how did I go about relaxing? I did more development work at home. Since we’ve moved into our house I haven’t really had a lot of time to do much development, more tiling grouting and renovating than anything else. This last week though, as we started to get on top of things, I took some time to put together a widget for Android. I’ve been collecting, storing and graphing data from various sensors around the house for some time now and while the graphs are pretty they aren’t really a quick or efficient way of reading the status at a glance.
Step forward the widget. Each widget requests XML data from the server and presents it on the widget, this allows an infinite number of widget variations since the only change is the data received. In other words, if it’s in the database it can be served. The widget itself has a number of coloured backgrounds which the server data can trigger if and it’s also capable of playing an alarm sound if required. I still need to fix this because the alarm sound triggers on each update and there’s currently no way to tell the widget to be quiet.
Update: Fixed this, tapping the widget will silence it until the next alarm trigger ie once the state returns to normal and then alarms once again.
Incidentally, since I only have a self signed certificate on my server but still wanted encrypted access I had to extend the DefaultHttpClient. By default Android will just refuse to connect to a server if the certificate isn’t signed by one of the ‘trusted’ certificate authorities – it wont tell you that it refused, it’ll just silently fail. You’d only ever really know if you’d connected to your device via adb and done a logcat. You can get round this by adding a keystore to your application, which is good enough for testing or personal applications.
If you want to do this you need to make sure you have the Bouncy Castle cryptography jar in your CLASSPATH. The first thing you’ll need is a copy of the certificate which I hope you’ve generated and installed on your server. If you need to get a remote server certificate you can use the following command (all one line).
echo | openssl s_client -connect your.server.goes.here:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > mycert.pem |
Replace the “your.server.goes.here” with your server, obviously. Once you’ve done that export the CLASSPATH to the Bouncy Castle jar you downloaded replacing the path I’ve used with the location you downloaded it to:
export CLASSPATH=bcprov-jdk16-146.jar |
You can now use the following script, note that the keystore name is appkeystore.bks as on line 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash CERTSTORE=appkeystore.bks if [ -a $CERTSTORE ]; then rm $CERTSTORE || exit 1 fi keytool \ -import \ -v \ -trustcacerts \ -alias 0 \ -file <(openssl x509 -in mycert.pem) \ -keystore $CERTSTORE \ -storetype BKS \ -provider org.bouncycastle.jce.provider.BouncyCastleProvider \ -providerpath /usr/share/java/bcprov.jar \ -storepass MyPaSsWoRd |
Replacing the MyPaSsWoRd on line 19 with a password of your choosing, you’ll need it later too. If you run the script you should get some output like this, obviously with your server information – remember to answer yes to the “Trust this certificate” prompt.
Owner: EMAILADDRESS=info@ automated.it, CN=www.automated.it, OU=Tech, O=Automated IT, L=Eye, ST=Suffolk, C=GB Issuer: EMAILADDRESS=info@ automated.it, CN=www.automated.it, OU=Tech, O=Automated IT, L=Eye, ST=Suffolk, C=GB Serial number: 4dce9c74 Valid from: Sat May 14 16:15:00 BST 2011 until: Sun May 13 16:15:00 BST 2012 Certificate fingerprints: MD5: 32:0F:33:0C:42:8D:FF:78:90:46:31:7A:4F:D3:33:23 SHA1: BD:A8:B8:21:B1:48:C3:53:BB:01:22:65:9E:00:6E:14:7B:DE:4E:F6 Signature algorithm name: SHA1withRSA Version: 1 Trust this certificate? [no]:yes Certificate was added to keystore [Storing appkeystore.bks] |
Create a directory called “raw” in your project’s ‘res‘ folder and copy the appkeystore.bks file to it.
In your Android application or widget you can now create a new class for the following code which will extend the original DefaultHttpClient class. You’ll want to change the package name on line 1 to match your application.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package your.package.name.here import android.content.Context; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.SingleClientConnManager; import java.io.InputStream; import java.security.KeyStore; public class myHttpClient extends DefaultHttpClient { final Context context; public String UserAgent="Android dataWidget (ScaredyCat 0014150511-0.1b) [http://blog.automated.it]"; public myHttpClient(Context context) { this.context = context; } @Override protected ClientConnectionManager createClientConnectionManager() { SchemeRegistry registry = new SchemeRegistry(); registry.register( new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", newSslSocketFactory(), 443)); return new SingleClientConnManager(getParams(), registry); } private SSLSocketFactory newSslSocketFactory() { try { KeyStore trusted = KeyStore.getInstance("BKS"); InputStream in = context.getResources().openRawResource(R.raw.appkeystore); try { trusted.load(in, "MyPaSsWoRd".toCharArray()); } finally { in.close(); } return new SSLSocketFactory(trusted); } catch (Exception e) { throw new AssertionError(e); } } } |
Note that the password used in the script earlier should match the one on line 37– use your own different password in production for security purposes. You can now use the class as required in your application, for example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | myHttpClient httpclient = new myHttpClient(context); httpclient.getCredentialsProvider().setCredentials(new AuthScope(host, port), new UsernamePasswordCredentials(username,password)); BasicHttpContext localcontext = new BasicHttpContext(); BasicScheme basicAuth = new BasicScheme(); localcontext.setAttribute("preemptive-auth", basicAuth); httpclient.addRequestInterceptor(preemptiveAuth, 0); HttpHost targetHost = new HttpHost(host, port, scheme); HttpGet httpget = new HttpGet(url); httpget.setHeader("User-Agent", httpclient.UserAgent ); |
Once I’d got the SSL connection I could get the application to download a list of sensors from the database, this only happens the first time the first widget is added to the home screen. I need to sort a way of allowing the user to delete the list if more sensors are added. At the moment clearing the data for the widget application works but it erases the widget settings too.
When I’m at home I want to connect to a local server for the information for the widgets and when I’m out and about (using a 3G connection) I want to connect to an external server. I implemented the ability to automatically switch when my phone connected to my WiFi access point. One final thing I did was to add the ability to long press on a text field and then select ‘Save as default‘ allowing things like servers, Wifi MAC address, username and password to be saved as the defaults for all widgets.
Tagged with: 1-Wire • android • currentcost • opensource • software
May 20, 2011 21:10
May
22
Extra Cupcake, Still No Latitude
15 years ago, at the end of May | Leave a Comment
After getting Android Cupcake about a month ago and running it happily, this morning I was notified of another update that was a security fix. I have been unable to find anything that mentions what the fix was for, I guess it’s a little early for that information to be floating around. I’ve got my log from the G1 and will be taking a look to see if there’s anything interesting there.
Shame that this fix didn’t include making Latitude available for UK users – Google seems to be coming up with excuses that don’t really wash for that. Considering Latitude is available to pretty much every other smart phone out there and that it’s even on the G2.
If you want to get a copy of the update, you can download it direct from Google’s servers
Update:
I’ve extracted the update and here’s a list of the contents, the largest patch is in Maps (at 291KB) and the second largest is in framework.odex (at 271KB), then “MediaUploader” which is likely to be the YouTube and Picasa uploading service (at 166KB).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | total 3496 drwxr-xr-x 6 andypowell staff 204B 23 May 11:24 META-INF -rwxr-xr-x 1 andypowell staff 141K 20 May 10:03 applypatch -rwxr-xr-x 1 andypowell staff 1.6M 20 May 10:03 boot.img drwxr-xr-x 4 andypowell staff 136B 23 May 11:25 patch drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 system ./META-INF: total 56 -rwxr-xr-x 1 andypowell staff 1.7K 20 Aug 2008 CERT.RSA -rwxr-xr-x 1 andypowell staff 12K 20 Aug 2008 CERT.SF -rwxr-xr-x 1 andypowell staff 12K 20 Aug 2008 MANIFEST.MF drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 com ./META-INF/com: total 0 drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 google ./META-INF/com/google: total 0 drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 android ./META-INF/com/google/android: total 96 -rwxr-xr-x 1 andypowell staff 47K 20 May 10:03 update-script ./patch: total 0 drwxr-xr-x 9 andypowell staff 306B 23 May 11:25 system ./patch/system: total 8 drwxr-xr-x 93 andypowell staff 3.1K 23 May 11:24 app drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 bin -rwxr-xr-x 1 andypowell staff 236B 20 May 10:03 build.prop.p drwxr-xr-x 6 andypowell staff 204B 23 May 11:26 etc drwxr-xr-x 37 andypowell staff 1.2K 23 May 11:24 framework drwxr-xr-x 5 andypowell staff 170B 23 May 11:25 lib ./patch/system/app: total 1896 -rwxr-xr-x 1 andypowell staff 324B 20 May 10:02 AlarmClock.apk.p -rwxr-xr-x 1 andypowell staff 262B 20 May 10:02 AlarmClock.odex.p -rwxr-xr-x 1 andypowell staff 582B 20 May 10:02 Browser.apk.p -rwxr-xr-x 1 andypowell staff 312B 20 May 10:02 Browser.odex.p -rwxr-xr-x 1 andypowell staff 156B 20 May 10:02 BugReport.apk.p -rwxr-xr-x 1 andypowell staff 266B 20 May 10:02 BugReport.odex.p -rwxr-xr-x 1 andypowell staff 223B 20 May 10:02 Calculator.apk.p -rwxr-xr-x 1 andypowell staff 266B 20 May 10:02 Calculator.odex.p -rwxr-xr-x 1 andypowell staff 402B 20 May 10:02 Calendar.apk.p -rwxr-xr-x 1 andypowell staff 262B 20 May 10:03 Calendar.odex.p -rwxr-xr-x 1 andypowell staff 205B 20 May 10:03 CalendarProvider.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 CalendarProvider.odex.p -rwxr-xr-x 1 andypowell staff 566B 20 May 10:03 Camera.apk.p -rwxr-xr-x 1 andypowell staff 268B 20 May 10:03 Camera.odex.p -rwxr-xr-x 1 andypowell staff 11K 20 May 10:03 Contacts.apk.p -rwxr-xr-x 1 andypowell staff 260B 20 May 10:03 Contacts.odex.p -rwxr-xr-x 1 andypowell staff 174B 20 May 10:03 DownloadProvider.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 DownloadProvider.odex.p -rwxr-xr-x 1 andypowell staff 165B 20 May 10:03 DrmProvider.apk.p -rwxr-xr-x 1 andypowell staff 257B 20 May 10:03 DrmProvider.odex.p -rwxr-xr-x 1 andypowell staff 455B 20 May 10:03 Email.apk.p -rwxr-xr-x 1 andypowell staff 270B 20 May 10:03 Email.odex.p -rwxr-xr-x 1 andypowell staff 1.6K 20 May 10:03 FieldTest.apk.p -rwxr-xr-x 1 andypowell staff 631B 20 May 10:03 Gmail.apk.p -rwxr-xr-x 1 andypowell staff 267B 20 May 10:03 Gmail.odex.p -rwxr-xr-x 1 andypowell staff 176B 20 May 10:03 GmailProvider.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 GmailProvider.odex.p -rwxr-xr-x 1 andypowell staff 191B 20 May 10:03 GoogleApps.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 GoogleApps.odex.p -rwxr-xr-x 1 andypowell staff 170B 20 May 10:03 GoogleContactsProvider.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 GoogleContactsProvider.odex.p -rwxr-xr-x 1 andypowell staff 162B 20 May 10:03 GooglePartnerSetup.apk.p -rwxr-xr-x 1 andypowell staff 261B 20 May 10:03 GooglePartnerSetup.odex.p -rwxr-xr-x 1 andypowell staff 174B 20 May 10:03 GoogleSearch.apk.p -rwxr-xr-x 1 andypowell staff 258B 20 May 10:03 GoogleSearch.odex.p -rwxr-xr-x 1 andypowell staff 172B 20 May 10:03 GoogleSettingsProvider.apk.p -rwxr-xr-x 1 andypowell staff 266B 20 May 10:03 GoogleSettingsProvider.odex.p -rwxr-xr-x 1 andypowell staff 206B 20 May 10:03 GoogleSubscribedFeedsProvider.apk.p -rwxr-xr-x 1 andypowell staff 265B 20 May 10:03 GoogleSubscribedFeedsProvider.odex.p -rwxr-xr-x 1 andypowell staff 154B 20 May 10:03 HTMLViewer.apk.p -rwxr-xr-x 1 andypowell staff 258B 20 May 10:03 HTMLViewer.odex.p -rwxr-xr-x 1 andypowell staff 208B 20 May 10:03 ImProvider.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 ImProvider.odex.p -rwxr-xr-x 1 andypowell staff 443B 20 May 10:03 LatinIME.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 LatinIME.odex.p -rwxr-xr-x 1 andypowell staff 37K 20 May 10:03 Launcher.apk.p -rwxr-xr-x 1 andypowell staff 3.3K 20 May 10:03 Launcher.odex.p -rwxr-xr-x 1 andypowell staff 290K 20 May 10:03 Maps.apk.p -rwxr-xr-x 1 andypowell staff 180B 20 May 10:03 MediaProvider.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 MediaProvider.odex.p -rwxr-xr-x 1 andypowell staff 165K 20 May 10:03 MediaUploader.apk.p -rwxr-xr-x 1 andypowell staff 459B 20 May 10:03 Mms.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 Mms.odex.p -rwxr-xr-x 1 andypowell staff 7.6K 20 May 10:03 Music.apk.p -rwxr-xr-x 1 andypowell staff 265B 20 May 10:03 Music.odex.p -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 NetworkLocation.apk.p -rwxr-xr-x 1 andypowell staff 1.9K 20 May 10:03 NetworkLocation.odex.p -rwxr-xr-x 1 andypowell staff 198B 20 May 10:03 PackageInstaller.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 PackageInstaller.odex.p -rwxr-xr-x 1 andypowell staff 29K 20 May 10:03 Phone.apk.p -rwxr-xr-x 1 andypowell staff 23K 20 May 10:03 Phone.odex.p -rwxr-xr-x 1 andypowell staff 23K 20 May 10:03 Settings.apk.p -rwxr-xr-x 1 andypowell staff 266B 20 May 10:03 Settings.odex.p -rwxr-xr-x 1 andypowell staff 168B 20 May 10:03 SettingsProvider.apk.p -rwxr-xr-x 1 andypowell staff 262B 20 May 10:03 SettingsProvider.odex.p -rwxr-xr-x 1 andypowell staff 18K 20 May 10:03 SetupWizard.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 SetupWizard.odex.p -rwxr-xr-x 1 andypowell staff 215B 20 May 10:03 SoundRecorder.apk.p -rwxr-xr-x 1 andypowell staff 261B 20 May 10:03 SoundRecorder.odex.p -rwxr-xr-x 1 andypowell staff 206B 20 May 10:03 Stk.apk.p -rwxr-xr-x 1 andypowell staff 262B 20 May 10:03 Stk.odex.p -rwxr-xr-x 1 andypowell staff 212B 20 May 10:03 Street.apk.p -rwxr-xr-x 1 andypowell staff 265B 20 May 10:03 Street.odex.p -rwxr-xr-x 1 andypowell staff 195B 20 May 10:03 SystemUpdater.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 SystemUpdater.odex.p -rwxr-xr-x 1 andypowell staff 450B 20 May 10:03 Talk.apk.p -rwxr-xr-x 1 andypowell staff 265B 20 May 10:03 Talk.odex.p -rwxr-xr-x 1 andypowell staff 170B 20 May 10:03 TelephonyProvider.apk.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 TelephonyProvider.odex.p -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 UserDictionaryProvider.apk.p -rwxr-xr-x 1 andypowell staff 252B 20 May 10:03 UserDictionaryProvider.odex.p -rwxr-xr-x 1 andypowell staff 421B 20 May 10:03 Vending.apk.p -rwxr-xr-x 1 andypowell staff 269B 20 May 10:03 Vending.odex.p -rwxr-xr-x 1 andypowell staff 174B 20 May 10:03 Webnwalk.apk.p -rwxr-xr-x 1 andypowell staff 255B 20 May 10:03 Webnwalk.odex.p -rwxr-xr-x 1 andypowell staff 359B 20 May 10:03 YouTube.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 YouTube.odex.p -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 checkin.apk.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 checkin.odex.p -rwxr-xr-x 1 andypowell staff 196B 20 May 10:03 gtalkservice.apk.p -rwxr-xr-x 1 andypowell staff 261B 20 May 10:03 gtalkservice.odex.p ./patch/system/bin: total 8 -rwxr-xr-x 1 andypowell staff 160B 20 May 10:03 debuggerd.p ./patch/system/etc: total 96 -rwxr-xr-x 1 andypowell staff 42K 20 May 10:03 NOTICE.html.gz.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 contributors.html.p drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 security ./patch/system/etc/security: total 8 -rwxr-xr-x@ 1 andypowell staff 175B 20 May 10:03 otacerts.zip.p ./patch/system/framework: total 1040 -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 am.jar.p -rwxr-xr-x 1 andypowell staff 257B 20 May 10:03 am.odex.p -rwxr-xr-x 1 andypowell staff 176B 20 May 10:03 android.awt.jar.p -rwxr-xr-x 1 andypowell staff 270B 20 May 10:03 android.awt.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 android.policy.jar.p -rwxr-xr-x 1 andypowell staff 234B 20 May 10:03 android.policy.odex.p -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 android.test.runner.jar.p -rwxr-xr-x 1 andypowell staff 6.9K 20 May 10:03 android.test.runner.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 com.android.im.plugin.jar.p -rwxr-xr-x 1 andypowell staff 264B 20 May 10:03 com.android.im.plugin.odex.p -rwxr-xr-x 1 andypowell staff 152B 20 May 10:03 com.google.android.gtalkservice.jar.p -rwxr-xr-x 1 andypowell staff 266B 20 May 10:03 com.google.android.gtalkservice.odex.p -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 com.google.android.maps.jar.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 com.google.android.maps.odex.p -rwxr-xr-x 1 andypowell staff 285B 20 May 10:03 core.jar.p -rwxr-xr-x 1 andypowell staff 46K 20 May 10:03 core.odex.p -rwxr-xr-x 1 andypowell staff 155B 20 May 10:03 ext.jar.p -rwxr-xr-x 1 andypowell staff 211B 20 May 10:03 ext.odex.p -rwxr-xr-x 1 andypowell staff 63K 20 May 10:03 framework-res.apk.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 framework-tests.jar.p -rwxr-xr-x 1 andypowell staff 262B 20 May 10:03 framework-tests.odex.p -rwxr-xr-x 1 andypowell staff 168B 20 May 10:03 framework.jar.p -rwxr-xr-x 1 andypowell staff 270K 20 May 10:03 framework.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 ime.jar.p -rwxr-xr-x 1 andypowell staff 252B 20 May 10:03 ime.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 input.jar.p -rwxr-xr-x 1 andypowell staff 249B 20 May 10:03 input.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 monkey.jar.p -rwxr-xr-x 1 andypowell staff 267B 20 May 10:03 monkey.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 pm.jar.p -rwxr-xr-x 1 andypowell staff 263B 20 May 10:03 pm.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 services.jar.p -rwxr-xr-x 1 andypowell staff 4.6K 20 May 10:03 services.odex.p -rwxr-xr-x 1 andypowell staff 153B 20 May 10:03 svc.jar.p -rwxr-xr-x 1 andypowell staff 255B 20 May 10:03 svc.odex.p ./patch/system/lib: total 16 -rwxr-xr-x 1 andypowell staff 4.7K 20 May 10:03 libicudata.so.p drwxr-xr-x 3 andypowell staff 102B 23 May 11:24 modules ./patch/system/lib/modules: total 8 -rwxr-xr-x 1 andypowell staff 618B 20 May 10:03 wlan.ko.p ./system: total 3672 -rwxr-xr-x 1 andypowell staff 1.8M 20 May 10:03 recovery.img |
Tagged with: android • Cupcake • G1 • google • Latitude • security update • software
May 22, 2009 9:12
Apr
25
G1 Assault on battery
15 years ago, at the end of April | Leave a Comment
I know I’m late to the party but a few days ago I received a small package containing a T-Mobile G1 phone running Android. The first thing I did was go to unlock-now to get myself a SIM unlock code. After submitting my details and paying up the 17.50 EUR it was just a case of waiting for the email, about 3 hours in my case. The email details everything you need to know when unlocking, particularly useful is the info on setting up a new APN which you’ll need to do if you aren’t using T-Mobile as your carrier. My O2 PAYG SIM from my iPhone worked fine and soon the G1 was syncing happily with gmail. One of the things that struck me about the G1 was all the negative comment on it’s size and feel that I’d read in various blogs and reviews. Personally I couldn’t see and issue with either the thickness of the device or the the look and feel of it and I wasn’t alone in that. I really don’t see what all the ‘complaints’ were about.
One of the things I had heard though, that I can confirm, is the poor battery life. Without installing any extra software the only real control over the G1’s power management seems limited to turning off the GPS or WiFi. However, there is a ray of light. After installing Power Manager things improved immensely but it still wasn’t enough. The solution I settled on was to buy an extended, 2400mAh, battery which came with a replacement back. The battery is physically 2 or 3 times the thickness of the original, which is why you get a replacement and the end result is a device that’s about as thick as a NOKIA N95.
So why didn’t I wait for a G2? Simple really. The G1 has a wonderful physical keyboard. I really can’t stand on screen keyboards, perhaps I’m a minority.
Of course the other reason that I wont be getting a G2 is that Vodafone are capping both daily and monthly usage when you sign up – 15mb / day and 500mb a month. Perhaps everyone at Vodafone still uses a 6310? Maybe they just don’t like the G2 or Android. Who knows?
Update (Sunday 10th May) : G1 Running cupcake has been running for 3 days with the extended battery and no charging!
Tagged with: android • G1 • Google Phone • opensource
April 25, 2009 22:27
Current Electricity Use (15min)
iPhone/Webkit RSS Reader
Links
- automated home
- Automated It Technology News
- awooga!!!
- LinITX
- My Acer page
- My Asterisk pages
- My Work in progress (old)
- Noble Race Car
- openmoko / neo 1973 wiki
- planet openmoko
- Spadgecock Cumpants