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"