Recent Android versions added the ability to create backups via "adb backup". I use this during development if I want to look inside the database files (and other files written to the app's private directories).
Quite useful. Obviously you shouldn't encrypt the backup :)
2013-10-14
Creating a System Overlay (Always on Top over all Apps) in Android
I don't think this is something I want to see overused by apps but I guess there are some very cool things possible with this.
I have already seen apps using this concept in a good way and I already have ideas what to do with this (once I get enough spare time).
The code is based on the solution outlined at http://stackoverflow.com/questions/4481226/creating-a-system-overlay-always-on-top-button-in-android but this one also adds support for moving the view around by dragging it.
I have already seen apps using this concept in a good way and I already have ideas what to do with this (once I get enough spare time).
The code is based on the solution outlined at http://stackoverflow.com/questions/4481226/creating-a-system-overlay-always-on-top-button-in-android but this one also adds support for moving the view around by dragging it.
A fluent API for ContentResolver#query
One thing that always felt ugly was using ContentResolver#query. A line like this isn't very readable and changing the query often introduce new bugs:
c = getContentResolver().query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, "("+Contacts.HAS_PHONE_NUMBER+"=? AND "+Contacts.STARRED+"=?) OR ("+Contacts.HAS_PHONE_NUMBER+"=? AND "+Contacts.STARRED+"<>?)", new String[]{"1","0","1","0"}, Contacts.DISPLAY_NAME);
So I thought it would be nice if you could write this query like this:
c = Query.create().select(Contacts._ID,Contacts.DISPLAY_NAME).
where( Query.create().
where(Contacts.HAS_PHONE_NUMBER).eq("1").
and().where(Contacts.STARRED).eq("0")
).or().
where( Query.create().
where(Contacts.HAS_PHONE_NUMBER).eq("1").
and().where(Contacts.STARRED).ne("0")
).
orderBy(Contacts.DISPLAY_NAME).
build().execute(getContentResolver(), Contacts.CONTENT_URI);
c = Query.create().select(Contacts._ID,Contacts.DISPLAY_NAME).
where( Query.create().
where(Contacts.HAS_PHONE_NUMBER).eq("1").
and().where(Contacts.STARRED).eq("0")
).or().
where( Query.create().
where(Contacts.HAS_PHONE_NUMBER).eq("1").
and().where(Contacts.STARRED).ne("0")
).
orderBy(Contacts.DISPLAY_NAME).
build().execute(getContentResolver(), Contacts.CONTENT_URI);
IMHO this is easier to read, easier to understand and easier to maintain. So I did a quick proof of concept and it turned out to be pretty easy.
Subscribe to:
Posts (Atom)