Saturday, January 24, 2015

Android Implicit Intents

There are times that you want to utilize another application on the Android device for some action in your application. For example, let's say you have an application that opens a browser and navigate to a web site. You wouldn't want to build your own browser (most likely anyway), so you'd just let the Android device choose an application to use for navigating to the web site. When you do this, you're using an implicit intent. Here's how you do it.

private void navigateToWebSite() {
   // Create an intent for viewing a specific web site
   Uri google = Uri.parse("");
   Intent intent = new Intent(Intent.ACTION_VIEW, google);
   // Create a chooser intent
   Intent chooserIntent = Intent.createChooser(intent, "Browse with...");
   // Start the chooser activity
   if (intent.resolveActivity(getPackageManager()) != null) {

The chooserIntent is optional. I'm using it to add a custom title to the chooser dialog. You can simply create the intent and call "startActivity(intent)" and let Android display the standard chooser dialog.

In this example, we just told Android to include any application that can handle the ACTION_VIEW intent. What if you have written your own application that you want to include as an option for handling  this type of intent? In your application's AndroidManifest.xml file, you simply add an intent-filter within the definition of the activity.

For example, here I've added a second intent-filter to handle any applications that initiates an intent on the Intent.ACTION_VIEW with "http" requests, just like in the example above.

<activity android:label="@string/app_name" android:name=".MyOtherActivity">

           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER">

             <action android:name="android.intent.action.VIEW">

             <category android:name="android.intent.category.DEFAULT">

             <data android:scheme="http">


Monday, January 19, 2015

Android - Handling Configuration Changes Yourself

There are many things that can happen outside of your Android application. One of the most common occurrences is a change in the device settings. For example, the user might leave your app running, while they go into the display settings and change the font size.

Android Font Size Setting

When the user goes back to your application, the activity in your application is recreated, which means onCreate() is called all over again. Most times, this is o.k. In fact, for the most part, you want to trust Android to handle these global settings and manage the effects of those changes to the lifecycle of your application's activities. However, there are times when you may want to manually handle these configuration changes. One obvious advantage to manually handling the config changes, is that you can avoid the activity being killed and recreated. Note that onStart(), onResume(), and onRestart() will still be called.

To manually handle config changes, simply add the "android:configChanges" attribute to the activity in your Manifest file. For example:

            android:label="@string/app_name" >

There's a listing of the configChanges defined here:

The next step, is to override the onConfigurationChanged() method in the activity, like this:

    public void onConfigurationChanged(Configuration newConfig) {
        Log.i(TAG, "newConfig.fontScale = " + newConfig.fontScale);


When the font size changes in the device settings, your onConfigurationChanged() method is called and an object containing the new device configuration is passed to the method, for you to handle as you please.

Saturday, January 17, 2015

Android Development - Hello World Application

If you know Java, you can learn Android development. In this blog post, we'll create a very simple Android application in Android Studio and run it with an Android emulator. To get started, download the Android Studio installer here:

Take note of the system requirements, most importantly being the Java Development Kit (JDK).

Now that you've installed Android Studio, let's create a simple application for Android. Start up Android Studio and click the option for "Start a new Android Studio project".

Welcome to Android Studio Dialog

The next dialog prompts you to name your application and provide the Company Domain. For all intents and purposes, this is simply the package name for your Java classes. Choose a name for your application and package directory and click the "Next" button.

Android Studio New Project Dialog

The next dialog prompts you for the platform where you want to develop and deploy your application. Android is a very cool platform, in that you can develop apps for TV and wearables (e.g. watches), but for this example, I'm going to select "Phone and Tablet" and choose "API 8: Android 2.2 (Froyo)" for my minimum SDK version. When you develop applications for Android, you specify the minimum and maximum SDK version. For this application, API 8 Froyo will be the minimum SDK version needed to run the application. After you select the platform, click "Next".

Android Studio Select API Version Dialog

Next, you select an activity for you application and click "Next". I'm going to choose a Blank Activity. As you get more experienced with Android development, you'll become familiar with activities and the Activity class. For now, you can think of an activity as a screen or view in your application. By choosing Blank Activity, the application will have a blank screen to start building an application.

Android Studio Activity Dialog

The next dialog prompts you for a name for the activity. I'm going to leave it as MainActivity and click "Finish".

Android Studio - Name Activity Dialog

After clicking the "Finish" button, you'll see a progress dialog, as your application is being created.

Android Studio - Create Project Progress Dialog

When Android Studio is finished building your project, you'll see your new Android application open in the IDE.

Android Studio - IDE Screenshot

Next, let's run the application in an Android emulator. You can start up an emulator from the menu option under Tools-> Android -> AVD Manager. Note that AVD Manager is short for Android Virtual Device Manager.

Android Studio - AVD Manager Menu Option

The AVD Manager dialog prompts you to start a virtual device / emulator. If you don't have a virtual device created, you need to click the button for "Create Virtual Device...". This will allow you to device configuration and Android API version that you want to emulate. For this example, I'm going to use the virtual device that emulates a Nexus 5 using API 21. Because I already have it created, I'll click the green start button on the right side of the device listing, to start the device emulator.

Android Studio - Choose Virtual Device

Next, you'll see a progress dialog, as your device emulator is starting.

Android Studio - Starting Android Virtual Device Progress Dialog

Note that it can take a few minutes to start the emulator, so be patient. After your emulator has started, you'll see the Android welcome screen (just as you'd see if you were powering on an actual Android device). After powering on, you'll see the Android home screen.

Android Studio - Galaxy Nexus Startup Screen

To unlock the welcome screen, just click on the unlock icon and swipe upwards, as you would on an actual Nexus device.

Android Studio - Galaxy Nexus Home Screen

Now that the emulator is running, go back to your Android Studio IDE to run your application on the emulator. From the Android Studio menu, select Run -> Run...

Android Studio - Run Application Menu

You'll be prompted for the device where you want to run the application. Choose the emulator that's already running and click "OK".

Android Studio - Choose Running Device Dialog

After a few seconds, you'll see the application running on the device emulator.

Android Studio - Hello World Application

Congratulations, you've just created your first Android application! In the next Android blog post, I'll talk about the project structure and the files in the project, as well as provide a more involved application example.