Monday, February 3, 2014

How to show the Google Map in Android App

Well here I am specifically talking about getting it done with Android Studio and with Maps API v2.

First of all you need the Google Play services downloaded using the SDK Manger.


Then add the Google Play services version to your app's manifest file.
<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
Get your Google Maps API key.

  • Go here: https://code.google.com/apis/console/?noredirect and click 'Cloud Console' link.
  • Register a project there and turn on your Google Maps Android App v2 Service
  • Create a new key under APIs & auth -> Credentials
  • Add the key information to the manifest. See below.
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="AasdJHJHKSDHfcFJLbZhndBC_fdsd1KEHk"/>
Add permissions in the manifest to access Internet.
<uses-permission android:name="android.permission.INTERNET"/>
Add a map fragment to your layout. Note that I have used SupportMapFragment. That comes with Android Support Repository.
<fragment 
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          class="com.google.android.gms.maps.SupportMapFragment"/>
Check device compatibility. If Google Play Services are not up-to-date on the phone, this will let the user to update then and there.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
int mapResult = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (mapResult != ConnectionResult.SUCCESS) {
    GooglePlayServicesUtil.getErrorDialog(mapResult, this, 0).show();
} else {
    mapFragment.getMap().animateCamera(CameraUpdateFactory.zoomIn());
}
That's about it. Now the map should be visible on your app. If not, patiently go through the above check-list again and see what you have missed :)

Monday, January 6, 2014

All new SLT Usage Meter is here!

The SLT has revamped their website and not surprisingly has fixed the security hole too, which enabled us to grab the usage data only by giving the user id. Now users are required to create a new profile here in order to view their usage.

Sadly this made my 'SLT Usage Meter' browser add-ons obsolete. Well technically for few days, until I found some spare time to figure out the new thing. Hey SLT, we are still keeping up :)

I have updated add-ons for Chrome and Firefox both, which now work fine with the new portal login credentials. Now you need to enter the password as well so the gadjet's wow factor is gone, but that's the way it is...

I changed the icon and the layout of the gadjet too. Special thanks to GK, who supplied me with a sample icon and encouraged me to make it more eye candy. Please feel free to comment about what you think of the new look. Thank you.

Download links:
Chrome: https://chrome.google.com/webstore/detail/slt-usage-meter/hofjanlkemfjdabokampgoehhfifbbjc
Firefox: https://addons.mozilla.org/en-US/firefox/addon/slt-usage-meter

Sunday, December 29, 2013

Connecting your Android phone to your Windows WiFi HotSpot

Now this actually something I thought would be a piece of cake, until the day I actually wanted to do it.

This is how I tried:

I went to 'Network and Sharing Center' and selected 'Set up a Connection or Network' and clicked on 'Set up a wireless ad hoc (computer-to-computer) network'.


Then gave the following details.



Windows said my network is ready to use but it was not showing up on my Android phone.

Googled a bit, and got the bad news. Android does not support WiFi ad hoc networks! Well at least if your phone is not rooted. In my case I was trying with a Nexus running Vanilla Android. Doh!

Again, Google to the rescue. I found out that we can use 'netsh' administrative commands to host a wireless network in the access point mode instead of the ad hoc mode.

So on an administrative command prompt, you type:
netsh wlan set hostednetwork mode=allow ssid=MyAdHocNetwork
key=12345678



Then you start it:
netsh wlan start hostednetwork



Now you will see 'MyAdHocNetwork' in your Android phone's WiFi networks list!

PS: Later I found out this can be done with ease using 'Virtual Router Plus', but it doesn't hurt to get a little grease under the nails once in a while :)

How to refer an external library (.jar) in Android Studio

I had quite a bit of trouble doing this, hence thought of blogging it.

First you need to download the required .jar file. In my case it is 'commons-codec-1.9.jar'.

Then create a folder named 'lib' in your project folder and copy the .jar file.

From Android Studio, right click the lib file and select 'Add as Library...'.



Select your project and confirm.


Open 'build.gradle' of your project and add line 'the following line under 'dependencies':
compile files('libs/commons-codec-1.9.jar')



Add code to use the referenced library.



Rebuild your project.



That's it! :)

Sunday, December 22, 2013

Android Studio New Project Wizard Weird Blank Error Resolution

Recently I bought a new laptop and had to install all my software from scratch. Everything worked fine but I just couldn't get the Android Studio working. Whenever I tried to complete the New Project Wizard, it backed off throwing the following blank error message.


I tried re-installing the Studio, JDK, trying various setup configurations, typical restarts and whatnot but this was not going away. Surprisingly the samples which comes with SDK seem to load fine. Therefore I tried to copy one sample project folder to my working folder and thought of changing everything to suit my new project. Kaboom! The error came back!!!

Then only I checked whether my working folder path is to blame...


Zoomed...


Damn it! That single quotation mark is screwing things up all this time. Shame on you Android Studio. It's almost 2014 and still you cannot sanitize user inputs? So I changed my working directory and all went fine just like the old days :) Hope this post will help someone someday who is splitting hair across this stupid error. Peace out!


Saturday, September 21, 2013

How to run AutoCAD R14 in 64bit Windows 7

If you hate reading all the step-by-step crap about how I did it, just scroll to the bottom. The summary is there :)

 


First of all a bit of history on why I actually want to do this. My father is a surveyor. While I was doing my bachelors, I wrote a program to automate block plan drawing using AutoLISP. This was running on top of AutoCAD R14, and since then he was using it to do all his work. This was installed on Windows XP and was running on a desktop PC. Recently I upgraded my laptop and I wanted to give my old one to him and it was running a genuine Windows 7. Then I faced this problem on running AutoCAD R14 on 64bit Windows 7...

Before we start, I have to confess that I actually had a copy of the files which I got from the installed directory in Windows XP. If you want to do a fresh installation, then I am not sure how you can go about running the AutoCAD setup on Windows 7. Most probably you will have to set up a virtual box running Windows XP, install AutoCAD on it and then get the installed files copied to somewhere else. (The reason being the AutoCAD R14 setup does not run on Windows XP compatibility mode)

Ok, so let's assume you have a complete copy of AutoCAD folder from a Windows XP box. If you run the AutoCAD.exe directly in Windows 7, you get a message saying 'heidi3.dll' is not found. So first thing I did was to download it and copy it to the AutoCAD folder. You can download it here.

Now when you run AutoCAD, a different type of error message starts to appear. It's thrown from 'SmartHeap Library' and reveals nothing other than its enum value :D 'MEM_BAD_POINTER'. A bit of googling revealed that it is due to the 'sh31w32.dll' which is probably out of date when dealing with a 64bit OS. So I downloaded a more recent copy and replaced which was inside the AutoCAD directory. You can get it here.

And voila! AutoCAD splash screen came up! Hold on... that was just for a second. The main interface also got loaded and greeted me with another error message. I started loving it! This time it was more specific, just like the first one. It said now it cannot find 'gdifont3.hdi'. No worries, Internet to the rescue. So I downloaded the god damn file and copied it just like before. Get it here.

I was expecting a series of file missing error messages, but to my surprise, AutoCAD loaded fine and seemed to work just like it was freshly installed on Windows 7! Even my lisp program was running perfectly. So there you have it. AutoCAD R14 running on 64bit Windows 7 without skipping a beat!

Cheers!

Ok so here's what you need to do in a nutshell:
  1. You need a copy of working AutoCAD R14 files from another computer.
  2. Copy the following files into that folder. (Replace whatever necessary)
  3. Done!

Sunday, July 7, 2013

The Android+Azure Love Story

Once upon a time, there was this beautiful princess named ‘Android’. ‘Azure’ was the most powerful warrior at that time. One sunny day… Ok, let’s cut the crap and get down to business.

If you haven’t tried out Windows Azure yet, well then you’ve been missing out a lot. Windows Azure is amazing! If you’ve been living under a rock for the last couple of years, Azure is Microsoft’s flexible, open & rock solid cloud platform. And by any chance if you haven’t heard of Android, stop reading right now and go kill yourself!

With the introduction of the Mobile Services SDK for Android, Windows Azure supports developers with super easy access to structure data storage, authenticate and push notifications using GCM. Now you are going to learn how to get started.

Prerequisites:

Let’s build a simple ‘Contacts’ app which saves its content on the cloud. Sounds pretty lame, but we gotta start somewhere right?

Step 1: Create a new mobile service in Azure.


Step 2: Go to the DATA tab and create a new table named ‘Contact’. You do not need to create the columns. They are automatically generated when the data is inserted.


Step 3: Create a new Android project.

Step 4: Extract the .jar files in Mobile Services SDK to the project’s lib folder.

Step 5: Create a new class to hold the contact data.


The class name has to be the same name as of the table in mobile service database. Case doesn't matter.


Did you notice the annotations? They specify the mapping between the DTO fields and the back end Azure table columns. They even work with private fields.

Step 6: Modify onCreate method of your main activity to insert a random contact.


Client creation takes the mobile service URL and the application key, which can be found in the portal.

Note: `getRandomContact’ and  ‘showMessage’ method implementation details are omitted for brevity.

Step 7: Run the app couple of times.


Step 8: Browse the Contact table in Azure.


So there you have it. An Android app hookup up with an Azure backend in no time! And that’s not all; you can perform all your CRUD operations with ease. You can even intercept requests to the database using the ‘Script’ tab. This is particularly useful for hooking up push notifications for the GCM clients, like illustrated below.


The only thing you have to do is to enter your API key in the ‘Push’ tab. You can get your API key by registering the app in Google APIs console.

Also you can setup authentication for your app using Google, Facebook, Microsoft or Twitter accounts very easily. All you gotta do is add the credentials under the ‘Identity’ tab.

So, hopefully you figured how easy it is to use Azure mobile services with Android. Remember that you get 10 free mobile services with your free trial, so start experimenting now. I’m sure you are going to love it.

Inspired by a Colombo Mobile Developer Meetup session.