After a year and 3 months of being in beta and several months of procrastination, and then several more months of coding TPG Monitor v1.0 has finally been released!
During the year, I have received several emails of awesome and also many bugs were raised and features suggested. The one feature that stood out from the rest was the ability to auto log in. Well… the wait is over! TPG Monitor v1.0 allows you to immediately see your usage without logging in
There are also a couple of other improvements – eg. a new UI that should make the app easier to use, old/inactive accounts are now hidden away!
I’ve also written up a manual that will hopefully answer most of the common questions.
If you haven’t yet, head over to the market and grab the update
Note: After the update, you’ll need to log in again (even if you’ve chosen to save password originally). You will also need to re-add the app shortcut if you’ve created one. Other than that, enjoy
I couldn’t call this an Android blog if I didn’t write something about the recent announcement of Android 4.0 – Ice Cream Sandwich (ICS) that was revealed yesterday.
My first impression? Looks awesome and lots of cool new features that I want to try out
Firstly, I think Google has really concentrated on looks and finishing touches for this release. From the videos, it feels like the stock Android finally looks ‘polished’ (how awesome does that dialer look!)
Looks can be quite subjective, but I for one, quite like the new look. There seems to be lots of small changes here and there both to the looks and the user experience to tie everything together.
The demo of the new camera is quite impressive – though I do wonder how much of what was demo-ed hinges on the Samsung Galaxy Nexus and how much is enabled by ICS. For me, I tried near stock Gingerbread (CM7) on my HTC Desire, and the camera was a huge let down, one of the reasons I went back to a Sense ROM (Insertcoin). Here’s to hoping ICS provides a good camera interface for all phones!
The new stock browser with it’s 16 tabs, thumbnail tabs view, save for offline reading, sync with Chrome, incognito etc seems like it will be able to replace what I’m currently using now – Dolphin Browser HD. Particularly interested in the save for offline reading feature.
The huge revamp of the “People” app is interesting, looks very nice in the demo. But to be honest, I’m not all that excited about it – more than half my contacts right now don’t have avatars/photos, let alone high resolution photos. The question I’m more interested in is will the new dialer (as awesome as it looks) support predictive dialing? (Yet another feature that was lacking from Gingerbread that made me switch away)
In the demo they showed the live speech to text which was cool, but probably something that will lose it’s shiny factor quite quickly for me. More interested in the improved keyboard – was very disappointed with the Gingerbread keyboard when I tried it. When compared with the standard HTC keyboard, it felt clunky and slow, plus the prediction selection was awkward. As you’ve probably guessed, another reason why I chose not to stick with Gingerbread.
Another drawback with the stock Android keyboards (and this is probably very specific to my case) is that it lacks good Chinese input. My HTC Desire (which originated from Taiwan) has the ability to enter Chinese in multiple ways: handwritten, zhuyin, pinyin, stroke and cangjie,with great recognition for handwritten and good prediction of phrases too. So far, haven’t found a good keyboard that supports all those input methods (in particular handwritten). Maybe I need to find a way to extract this keyboard and replace whatever is provided; alternatively, find out what keyboards are used in Asia when they use stock Android (they have to be able to easily input Chinese somehow!)
Wow, that this has turned out to be more of an essay as to why I chose not to stick with Gingerbread… however the reason for the rant is I believe/hope that ICS will be able to overcome these issues and win me over! There are a lot of other improvements/features that I haven’t mentioned – notification bar without unlock; updated gmail/calendar apps; swipe to dismiss paradigm; data usage monitor; android beam (NFC) and probably another handful of things I have forgotten.
I do think that Ice Cream Sandwich will be definitely worth trying out! Now to hope a ICS ROM for HTC Desire will be out soon, and that the Desire will be able to handle it! Technically should be able to since Google did say any phone that can run Gingerbread can run Ice Cream Sandwich
Just updated the app (v0.8.8-beta) to include support for the new Super Value plans. As these plans are very new I haven’t really had a chance to do much testing, so although they should work, there may be some problems.
In particular, I still need to work on the “Infinity & Beyond” plan as it now has a new quota for international calls. If you are on this plan, it would be great if you could shoot me an email so I can see what can be done.
To get access to your new plans, while in the preference screen (one which shows your username + list of plans) hit ‘Menu’ and then ‘Refresh Plans’ (In the usage screen hit ‘Menu’ and then ‘Options’ to get to preferences screen). If your new Super Value plans are active, they should now appear (Working on a way to get rid of the old/inactive plans).
If you see anything odd, notice bugs etc feel free to contact me
ps. The much asked for auto-login is still in the works – thought support for the new plans was more urgent.
Today, TPG released a new set of new mobile plans that appear to replace the original “Talk and Text” plans – you’re account won’t be automatically migrated, you’ll need to apply for the change via your accounts page if you want to migrate to these new plans.
So what does this mean for the TPG Monitor App? Well, at the moment the original “Talk and Text: plans will still work. However, I will need to update the app to accomodate for these new “Super Saver” plans as soon as possible.
There will be some guess work involved when enabling these new plans, hopefully not to much! If you want to help make it easier for me to accomodate for these plans, it would be great if you could send me the source code/screenshot of the page that shows all your mobile accounts, and the detailed mobile usage page as well – remember to remove/censor any personal information first! Shoot an email to “dx3 [at] psychopyko.com” if you want to help
Firstly, like to say a big THANKS! to all those who have sent in comments, added reviews for my TPG Monitor app – greatly appreciated to know you guys are finding it useful
Secondly, just want to let you guys know that your feedback and suggestions have not gone unheard! I was initially going to implement a “quick fix” for the auto-login (most requested feature), but after testing it out a bit decided it was not ideal. Instead I am working on a fairly major revamp which will hopefully make the app even more awesome
A bit more than one week ago, I published my first app on the Android Market All in all it all went well, but as with all things it wasn’t without drama!
In this post, I’ll talk a bit about the parts of the AndroidManifest.xml file that I found relavant to publishing an app.
Here is my AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.psychopyko.dx3.tpgmonitor" android:installLocation="auto" android:versionCode="6" android:versionName="0.8.5-beta"> <application android:label="TPG Monitor" android:icon="@drawable/ic_launcher_tpg" android:name="com.psychopyko.dx3.tpgmonitor.MyApplication"> <!-- activity definitions here --> </application> <uses-permission android:name="android.permission.INTERNET"/> <uses-sdk android:minSdkVersion="4"/> </manifest>
Let’s look at the manifest tag first, there are four elements of interest, starting with what I consider the ‘trickiest’.
a) package=”com.psychopyko.dx3.tpgmonitor” (line 3)
This element has two purposes. Firstly, all your code should live in this package, ie. your package names at the top of your .java files should be something like:
Secondly, and probably more importantly, when you publish on the Android Market, this name that determines how your application will be identified, and where it will be in the market (ie. what the URL will look like). Here is the URL to my TPG monitor on the Android Market:
The ID (in bold) is unique to every single app across in the Market. So, if I was to make another app, I may put something like: package=”com.psychopyko.dx3.awesomegame” and you it will appear in the market as:
The important thing to note here is once you’ve uploaded an apk with package name “abc” you’re stuck with it. If you made a mistake, you can’t re-upload it to fix the package name. You will need to first unpublish the incorrect app (so people won’t be able to see it) and then create a “new” app with the correct package name (yep I stuffed up the first time, that’s how I know).
I haven’t tried, but I would guess that if later in the future you decide you do want to use package name “abc”, you’ll have to upload another apk over your initial “mistake” and publish it for the world to see.
b) android:versionCode=”6″ (line 5)
This element is the way to determine if one version of your apk is newer or older than another. It has to be an integer, where the higher the number the newer the version. This number isn’t shown to users at all. Remember to bump this number every time you make an update!
c) android:versionName=”0.8.5-beta” (line 6)
This element is simply a pretty version name for your app, this is what your users will see. It appears in the “Current Version” info on the Market, when users download a new update and in “Application Info” on the phone. It’s really just a pretty name, but still a good idea to name it properly so users won’t get confused. (There isn’t a strict convention or rule for version names, but there are some guidelines regarding versioning)
d) android:installLocation=”auto” (line 4)
This element allows you to move your app to the SD card (Android 2.2+). There are three valid options:
- internalOnly (default)
As the names suggest, if you specify #2 or #3, your app will be able to be installed on the SD card. If you don’t specify this attribute, or specify “internalOnly” your app cannot be moved to the SD card. Unless there is a specific reason why your app must stay in the phone’s internal memory, I would suggest let users choose where they want their app to be stored (ie. specify “auto” or “preferExternal”)
Ok, that’s pretty much about it for the manifest tag, now let’s have a look at the next three tags application, uses-permission, uses-sdk.
<application> android:label & android:icon (lines 8 & 9)
These two will simply define the name and icon that is displayed to the user. The name should really be in your strings.xml, so it can be internationalised (but I felt lazy) – it is what you want to call your app. For example, it is the label that appears under the icon on your phone. The icon should be a png (three separate png files actually) that lives in the “drawable-ldpi, drawable-mdpi, drawable-hdpi” directories under the “res” directory. The filename is the same as what is defined in the xml file (so my icons are all called: ic_launcher_tpg.png). If you’re wondering what’s the deal with ldpi/mdpi/hdpi it is to cater for the various screen types of Android phones – Android docs provides a fairly comprehensive icon design guideline.
<uses-permission> (line 15)
This here lets Android know what permissions your app needs in order to work. In my case, the TPG Monitor is a fairly simple app, so all I needed is the Internet, so that is all I have defined. In my opinion, it is best to have as few permissions as possible – that way your users won’t need to wonder why your app is asking for permissions x, y, z. There are of course, many other permissions, and you might legitimately need them if your app does fancy cool stuff.
<uses-sdk> (line 16)
This tag will allow you to define your “minSdkVersion”, “maxSdkVersion” and “targetSdkVersion”. The value you specify is an integer that corresponds to the API Level (eg. Froyo = Android 2.2 = 8). Firstly, I would suggest not to define “maxSdkVersion” – there is no reason why you would want to restrict your app from future releases of Android OS. The reason I defined “minSdkVersion=4″ (Donut) is because of permissions. My app runs fine on Cupcake (Android 1.5, API Level 3), however, due to a bug in Android 1.5, even specifically only specifying the permission “INTERNET”, Cupcake will request for two additional permissions: “WRITE_EXTERNAL_STORAGE” and “READ_PHONE_STATE”. So given the small % of users on Cupcake and my dislike of my app asking for two additional permissions, I made the decision to not support Cupcake and have my app only ask for the one permission it needs.
So there you have it, my not so short summary of things in AndroidManifest.xml related to publishing on the Market that I found important. There are of course a whole host of other elements and options that you can include in your manifest file, but so far I haven’t found the need to look into them – they seem to either have sensible defaults, or not be that important. If there is something I missed, please tell me
ps. If you are using Cupcake, and would like to use TPG Monitor, shoot me an email and I’ll be more than happy to send you an apk that will run on your phone.
So, you’ve been working endless nights trying to get your app up and running and you’re nearly there. Most things are working; but it’s just not quite ready to be released into the Android Market; but you want people to see what you’ve done so far, or give people a teaser for what to expect. That’s the situation I’m in right now!
The question is.. how do you take a screenshot of your android emulator? First thing that comes to mind is, take a normal screenshot with the image cropped at what you want, but there has got to be a better way right? Yep indeed there is – use the “Dalvik Debug Monitor Service” or DDMS for short. From the all knowing android developer guide:
DDMS can capture screenshots, gather thread and stack information, spoof incoming calls and SMS messages, and has many other features.
So, how do you use the DDMS to take a screenshot? Follow the steps below (note, they are Mac specific but I would imagine if you have your android dev environment set up properly, it should also work for Windows)
- Launch your emulator
- In terminal type: ddms
Note: You might get a bunch of random errors (don’t worry you can ignore them – we just want a pretty screenshot)
- Click on your emulator
- In ‘Device’ menu, hit ‘Screen Capture’ (or cmd+S)
- You should now see a screenshot of your emulator which you can now save as a png
In Step2, I’m not entirely sure (yet) why there are errors about binding to a debugger (probably should read the guide in more detail), but so far it hasn’t prevented me from taking screenshots Also, if you’re wondering I’m using IntelliJ as my IDE (not Eclipse) so evidently, you don’t have to be using Eclipse in order to take a screenshot.
So, now to show off a couple of screenshots! As you can see, there is still work to be done before my TPG monitor is ready for the Android Market, but as promised, I’m also supporting Cap Saver and PAYG plans too! I know the screenshots aren’t terribly exciting, but if you are interested I will be more than happy to provide you with the latest stable, working apk
So it has been a very long time since my last post. But rest assured, I am still dabbling with dev on Android. In fact I’ve been developing my own TPG mobile usage monitor
Unfortunately, I haven’t had much time nor have I really given developing the app my full attention, therefore progress has been slow. It crossed my mind to post up bits and pieces of interesting tid bits/hints as I discover them, but being my first app there were many things I was unsure of, so decided it was best not to try and “teach” something that I wasn’t sure was correct.
Despite the slow progress, I think I am nearly there… just one more weekend I keep telling myself (every weekend). As a teaser, here is a screenshot of the ‘Usage Screen’ (this is for the Talk & Text Light plan). For those who are not on the Talk & Text plans, don’t worry, I will be supporting both Cap Saver and PAYG plans too
So for now, sit tight and hope I really need just one more weekend! If you have stumbled across this post and you are interested in being a alpha tester please email me – I’ve had limited opportunities for testing, and even more more person trying to break my app will help in making it better!
Over the past few months, I have been slowly (very slowly) finding my way around the world of Android dev. It was my intention to regularly post updates of random, interesting things I have found along the way, however that has obviously not gone to plan! (Probably because I haven’t been able to dedicate all that much time or attention, and haven’t quite felt like I’ve found anything in particular that is really worthy of a lengthy post)
Despite my limited attention and slow progress, I have discovered lots of random things here and there. Here are a couple that you will hopefully find helpful! (Fingers crossed that more will come)
- If possible, run the lowest level emulator, ie. an emulator running Android 1.5 (Cupcake).
I have found that the more recent emulators are very sluggish – makes the dev feedback cycle a pain. “Downgrading” to an earlier emulator means less waiting and getting frustrated twiddling your thumbs. Also, if you can get your app to work on Cupcake, then you’re not restricting your app only to users who are running the later OS versions.
- Resource file names can’t have capitals!!! (Only lower case and the underscore)
I’ve made this mistake twice! Your file names cannot have caps, so don’t use camelCase for your file names, instead use the underscore. If you forget it’s ok, your project just won’t compile and you’ll have to go and rename the files.
- Prepend ‘m‘ for member fields – it is an Android coding style standard
Maybe not a big one especially if you’re the only dev and it’s a small app, but I guess it never hurts to follow the standard of whatever you are coding on. So simply, if it is a member field, prepend the name with a ‘m‘ eg. mDbHelper
Have you tried turning it off and on again? ~IT Crowd
So finally got my hands on my shiny new HTC Desire… and been playing with it for the greater part of today
One of the first things I tried was to set up my 3G data – this proved to be fairly difficult until I hopped online and consulted the all-knowing Google. Following these instructions from Whirlpool worked like a treat! So what was next on the list? How to turn 3G on/off easily so I don’t exceed my bandwidth usage…
Another quick search led me to grab apndroid from the Android Marketplace and again, it worked nicely. Though after a bit more poking around, I found an inbuilt HTC widget that did the job (Add widget -> Settings -> Mobile Network) so I decided to uninstall apndroid (Settings -> Applications -> Manage applications). Though I realised that when I tried to add an app shortcut the apndroid icon was still in the list – not a biggie, but still annoying!
Next thing…? Connect the phone to my macbook pro of course! Now this proved to be a bit more troublesome than I thought. Selected ‘Disk Drive’ (HTC Sync is not mac friendly) and plugged the phone into the laptop. Phone started charging – all good. But it didn’t appear on the laptop After several attempts at plugging/unplugging still nothing. Last resort? Turned the phone off and on… and it worked. As a bonus, the apndroid icon also disappeared from the app shortcut list
Moral of the story… if all else fails… “Have you tried turning it off and on again?”