Friday, February 22, 2013

How to detect Internet connection after launching Android app

Some android apps may require users to have an active internet connection and may crash without one. The following implementation will allow detection of Internet connection. If an active connection does not exist, the user will be notified.

1. Create a new JAVA class named InternetCheck.java and paste the following code

package com.samples.myapp;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;


public class InternetCheck extends Activity {
 // flag for Internet connection status
 Boolean isInternetPresent = false;

 // Connection detector class
 ConnectionDetector cd;
 

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 
  // creating connection detector class instance
  cd = new ConnectionDetector(getApplicationContext());
 
  // get Internet status
  isInternetPresent = cd.isConnectingToInternet();

  // check for Internet status
  if (isInternetPresent) {
   // Internet Connection is Present
   // make HTTP requests
   showAlertDialog(InternetCheck.this, "Internet Connection",
     "You have internet connection", true);
  } else {
   // Internet connection is not present
   // Ask user to connect to Internet
   showAlertDialog(InternetCheck.this, "No Internet Connection",
     "You don't have internet connection.", false);
  }

 }
 /**
  * Function to display simple Alert Dialog
  * @param context - application context
  * @param title - alert dialog title
  * @param message - alert message
  * @param status - success/failure (used to set icon)
  * */
 public void showAlertDialog(Context context, String title, String message, Boolean status) {
  AlertDialog alertDialog = new AlertDialog.Builder(context).create();

  // Setting Dialog Title
  alertDialog.setTitle(title);

  // Setting Dialog Message
  alertDialog.setMessage(message);
 
  // Setting alert dialog icon
  alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);

  // Setting OK Button
  alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {
   }
  });

  // Showing Alert Message
  alertDialog.show();
 }
}

How to allow users to rate and comment an app from within an Android application

You can allow your users to rate and comment on your app from within itself. The following implementation prompts a user to rate and comment on your android app after a specified number of days and specified number of launches. The user will see three options like "Rate and comment", "Remind later" or "No Thanks"

1. Create a new JAVA class called RatingHelper.java and paste the following code

package com.samples.myapp;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;


public class RatingHelper {
    private final static String APP_TITLE = "MY APP TITLE";
    private final static String APP_PNAME = "com.samples.myapp";
   
    private final static int DAYS_UNTIL_PROMPT = 1;
    private final static int LAUNCHES_UNTIL_PROMPT = 5;
   
    public static void app_launched(Context mContext) {
        SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
        if (prefs.getBoolean("dontshowagain", false)) { return ; }
       
        SharedPreferences.Editor editor = prefs.edit();
       
        // Increment launch counter
        long launch_count = prefs.getLong("launch_count", 0) + 1;
        editor.putLong("launch_count", launch_count);

        // Get date of first launch
        Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
        if (date_firstLaunch == 0) {
            date_firstLaunch = System.currentTimeMillis();
            editor.putLong("date_firstlaunch", date_firstLaunch);
        }
       
        // Wait at least n days before opening
        if (launch_count >= LAUNCHES_UNTIL_PROMPT) {
            if (System.currentTimeMillis() >= date_firstLaunch +
                    (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
                showRateDialog(mContext, editor);
            }
        }
       
        editor.commit();
    }  
   
    public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {
        final Dialog dialog = new Dialog(mContext);
        dialog.setTitle("Rate " + APP_TITLE);

        LinearLayout ll = new LinearLayout(mContext);
        ll.setOrientation(LinearLayout.VERTICAL);
       
        TextView tv = new TextView(mContext);
        tv.setText("If you enjoy using " + APP_TITLE + ", please take a moment to rate it. Thanks for your support!");
        tv.setWidth(240);
        tv.setPadding(4, 0, 4, 10);
        ll.addView(tv);
       
        Button b1 = new Button(mContext);
        b1.setText("Rate " + APP_TITLE);
        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));
                dialog.dismiss();
            }
        });       
        ll.addView(b1);

        Button b2 = new Button(mContext);
        b2.setText("Remind me later");
        b2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        ll.addView(b2);

        Button b3 = new Button(mContext);
        b3.setText("No, thanks");
        b3.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                if (editor != null) {
                    editor.putBoolean("dontshowagain", true);
                    editor.commit();
                }
                dialog.dismiss();
            }
        });
        ll.addView(b3);

        dialog.setContentView(ll);       
        dialog.show();       
    }
}


2. Change the values of DAYS_UNTIL_PROMPT and LAUNCHES_UNTIL_PROMPT based on your app

3. Add the following line to invoke RatingHelper class from your other android activity class
RatingHelper.app_launched(this);

4. Add the following line in Android manifest file

      <activity android:name=".WebViewer">
      </activity>

Wednesday, February 20, 2013

How to display webpage from website on Android using WebView class

Android WebView class allows viewing a specified website URL from within an Android app without opening a web browser.

1. Create a new JAVA class called WebViewer.java and paste the following code

package com.samples.webexample;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class WebViewer extends DashboardActivity
{


 private WebView webView;
protected void onCreate(Bundle savedInstanceState)
{
   
  super.onCreate(savedInstanceState);       
  setContentView(R.layout.main);        


  // Create reference to UI elements       
  webView  = (WebView) findViewById(R.id.webview_compontent);       
             
  // workaround so that the default browser doesn't take over       
  webView.setWebViewClient(new MyWebViewClient());          

     
  // Setup click listener  
  openURL(); 
  }       


 /** Opens the URL in a browser */   
 private void openURL() {    

  webView.loadUrl("
http://www.mywebsite.com/about.html");
  webView.requestFocus();   
  }       


 private class MyWebViewClient extends WebViewClient {       
  @Override       
  public boolean shouldOverrideUrlLoading(WebView view, String url) {           
   view.loadUrl(url);           
   return true;       
   }   
  }
   
}


2. Create a new layout file named main.xml and paste the following code

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"  
    android:layout_width="fill_parent"   
    android:layout_height="fill_parent">


                  <WebView   
                      android:id="@+id/webview_compontent"    
                      android:layout_width="fill_parent"     
                      android:layout_height="fill_parent"     
                      android:layout_weight="1.0"    />
</LinearLayout>


3. Add the following line to your Android manifest file if you are calling this activity from another activity

      <activity android:name=".WebViewer">
      </activity>

How to play a streaming video using VideoView class in Android

1. Create a new class called VideoDisplay.java and paste the following code

package com.samples.video
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
 
public class VideoDisplay extends Activity
{
  

 @Override
    public void onCreate(Bundle savedInstanceState)
    { 

        String mp4path = http://www.mywebsite.com/myVideo.mp4;
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.main);
       
        VideoView videoView =(VideoView)findViewById(R.id.videoView);
        videoView.setVideoPath(mp4Path);
        videoView.setMediaController(new MediaController(this));       
        videoView.requestFocus();
       
        videoView.start();
     }

}

2. Create a new layout file named main.xml and paste the following code

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
>
 
<VideoView android:id="@+id/videoView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

/>
</LinearLayout>

3. Add the following lines in AndroidManifest.xml file

 <activity android:name=".VideoDisplay">
 </activity>


4. If you see a message saying "Sorry, this video cannot be played", try changing the name of your video file by excluding any white spaces. It looks like lower Android OS versions cannot play video files containing white spaces in their file name. For example, change "My Video.mp4" to "MyVideo.mp4"

Monday, February 18, 2013

Integrating Google Ads from Admob in an Android Application

There are various ways of monetizing an Android app. You can either charge a one time fee to users to install your app from Google Play, set up an in-app billing system to allow users to subscribe to services or publish your android application for free and make money through advertisements.
Monetizing an app through advertisements requires setting up your Android Eclipse project with required SDKs from respective ad network and embedding respective layout and code in your app.
 
I have explained each step of integrating Google Ad network or Admob in your Android application in following instructions.

Instructions

  1. Sign up for an account at Admob - http://www.admob.com
  2. Click "Add your first app" button and then click "Android app"
  3. Add the Android app information lile the url for your Android app, name and description
  4. Download latest version of Google Admob Ads SDK for Android to your computer and extract all contents
  5. Copy the GoogleAdMobAdsSDK jar file to your Android project's "libs" folder
  6. Open Eclipse IDE or restart Eclipse IDE if it is already open
  7. Right-click on your project, select "Properties". Navigate to "Java Build Path" option and add the Google AdMob Ads SDK jar file as a library
  8. Open a class file from your project and set the layout. In the following case, the layout file is main.xml:
    package com.google.example.ads.xml;
    import android.app.Activity;
    import android.os.Bundle;
    /**
    * A simple {@link Activity} which embeds an AdView in its layout XML.
    */
    public class BannerSample extends Activity {
      /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);   
      }
    }
  9. Open main.xml layout file and paste the following code. Make sure the following line is present in your LinearLayout header: xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" :
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
                  android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent">
        <TextView android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/hello"/>
        <com.google.ads.AdView android:id="@+id/ad"
                               android:layout_width="wrap_content"
                               android:layout_height="wrap_content"
                               ads:adSize="BANNER"
                               ads:adUnitId="AD_UNIT_ID_GOES_HERE"
                               ads:testDevices="TEST_EMULATOR,TEST_DEVICE_ID_GOES_HERE"
                               ads:loadAdOnCreate="true"/>
    </LinearLayout>
  10. You can find your AD_UNIT_ID from your Google AdMob account
  11. Remove the line "ads:testDevices" before launching your app in Google Play. This feature should only be used if you are testing your app in an android emulator
  12. Finally add the following lines to your Android Manifest file:
   <activity android:name="com.google.ads.AdActivity"
     android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
      />

Create 3D Image Buttons for Android Application using Microsoft Word 2010


It is easy to jazz up the look of your Android app by using Microsoft Word’s 3D image creation capability. You do not need to purchase any expensive applications like Adobe Photoshop. If you have Microsoft Word installed then you can create your own PNG image buttons for Android applications within minutes!
Let me illustrate how you can create a 3D image button for “Feedback” section of your app.

Instructions

  1. Open Microsoft Word 2010
  2. Click on “Insert” tab and select “Shapes” drop down menu. Select “Rounded Rectangle” shape from the drop down menu
  3. Press “Shift” + Left click and drag the rounded rectangle shape
  4. Select a shape effect from Format menu
  5. Click on “Insert” tab and select “Shapes” from drop down menu. Select “Oval Callout” and drag it to fit inside the rounded rectangle 
  6. Group both the shapes into a single block by pressing “Ctrl” key + Left click on each shape, right click and select “Group”
  7. Right-click the grouped shape and select “Copy”. Paste it in Microsoft Paint and save the image as a JPEG or PNG image  
  8. Congratulations! You have just created your first 3D Image button using Microsoft Word for use in you Android app. You may have to trim the white edges in the image to get rid of the white border