Wednesday, September 25, 2013

ListView with Checkbox android example



Download Full Source Code : Source Code



  • Create new project named "ListviewWithCheckbox".
  • add following code in activity_main.xml file.

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffeeeeee"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Country Codes"
        android:textSize="20sp" />

    <Button
        android:id="@+id/findSelected"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Get Selected Items" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>


  • Add below code in MainActivity.java file.

MainActivity.java



public class MainActivity extends Activity {

MyCustomAdapter dataAdapter = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Generate list View from ArrayList
displayListView();

checkButtonClick();

}

private void displayListView() {

// Array list of countries
ArrayList<States> stateList = new ArrayList<States>();

States _states = new States("91", "India", false);
stateList.add(_states);
_states = new States("61", "Australia", true);
stateList.add(_states);
_states = new States("55", "Brazil", false);
stateList.add(_states);
_states = new States("86", "China", true);
stateList.add(_states);
_states = new States("49", "Germany", true);
stateList.add(_states);
_states = new States("36", "Hungary", false);
stateList.add(_states);
_states = new States("39", "Italy", false);
stateList.add(_states);
_states = new States("1", "US", false);
stateList.add(_states);
_states = new States("44", "UK", false);
stateList.add(_states);

// create an ArrayAdaptar from the String Array
dataAdapter = new MyCustomAdapter(this, R.layout.state_info, stateList);
ListView listView = (ListView) findViewById(R.id.listView1);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);

listView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
States state = (States) parent.getItemAtPosition(position);
Toast.makeText(getApplicationContext(),
"Clicked on : " + state.getName(), Toast.LENGTH_LONG)
.show();
}
});
}

private class MyCustomAdapter extends ArrayAdapter<States> {

private ArrayList<States> stateList;

public MyCustomAdapter(Context context, int textViewResourceId,

ArrayList<States> stateList) {
super(context, textViewResourceId, stateList);
this.stateList = new ArrayList<States>();
this.stateList.addAll(stateList);
}

private class ViewHolder {
TextView code;
CheckBox name;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

Log.v("ConvertView", String.valueOf(position));

if (convertView == null) {

LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = vi.inflate(R.layout.state_info, null);

holder = new ViewHolder();
holder.code = (TextView) convertView.findViewById(R.id.code);
holder.name = (CheckBox) convertView
.findViewById(R.id.checkBox1);

convertView.setTag(holder);

holder.name.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
States _state = (States) cb.getTag();

Toast.makeText(
getApplicationContext(),
"Checkbox: " + cb.getText() + " -> "
+ cb.isChecked(), Toast.LENGTH_LONG)
.show();

_state.setSelected(cb.isChecked());
}
});

} else {
holder = (ViewHolder) convertView.getTag();
}

States state = stateList.get(position);

holder.code.setText(" (" + state.getCode() + ")");
holder.name.setText(state.getName());
holder.name.setChecked(state.isSelected());

holder.name.setTag(state);

return convertView;
}

}

private void checkButtonClick() {

Button myButton = (Button) findViewById(R.id.findSelected);

myButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

StringBuffer responseText = new StringBuffer();
responseText.append("Selected Countries are...\n");

ArrayList<States> stateList = dataAdapter.stateList;

for (int i = 0; i < stateList.size(); i++) {
States state = stateList.get(i);

if (state.isSelected()) {
responseText.append("\n" + state.getName());
}
}

Toast.makeText(getApplicationContext(), responseText,
Toast.LENGTH_LONG).show();
}
});
}

}



  • Create new POJO java class,Which is used for getters and setters methods.Named it States.java. 

States.java



public class States {

String code = null;
String name = null;
boolean selected = false;

public States(String code, String name, boolean selected) {
super();
this.code = code;
this.name = name;
this.selected = selected;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean isSelected() {
return selected;
}

public void setSelected(boolean selected) {
this.selected = selected;
}

}

  • Create new XML layout file, which is used to integrate CheckBox and TextView in ListView.Named it state_info.xml.

state_info.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="6dip" >

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="checkbox"
        android:textColor="#B40404" />

    <TextView
        android:id="@+id/code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/checkBox1"
        android:layout_alignBottom="@id/checkBox1"
        android:layout_toRightOf="@id/checkBox1"
        android:text="textview"
        android:textColor="#ff000000" />

</RelativeLayout>


  • Done ! Now run the project.


Download Full Source Code : Source Code



Tuesday, September 24, 2013

Check internet connection using broadcast receiver

In android device basically 2 types of internet connectivity.

1. Mobile internet (GPRS)
2. Wifi internet connectivity

If we need to perform some operation on internet connectivity change,Here is the full code for it.It is very useful to sync application data in offline and online mode also.


Let's Start 


  • First of all give below permission just above <application> tag.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


  • We are using broadcast receiver for notification. Broadcast receiver provides the functionality of background process.
  • It is running in back end continuously and will give notification.For this purpose we need to register our broadcast receiver in AndroidMenifest.xml file.  
  • Write down below code before completion of </application> tag(In <Application> tag).
<receiver
            android:name="<package_name>.NetworkChangeReceiver"
            android:label="NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>


  • Full AndroidMenifest.xml is given below:

AndroidMenifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcast_internetcheck"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.broadcast_internetcheck.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name="com.example.broadcast_internetcheck.NetworkChangeReceiver"
            android:label="NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>


  • Now Create on global file for check internet connectivity.It will return the result of which internet connectivity is currently active.
  • Create new java class file and named it, NetworkUtil.java

NetworkUtil.java


public class NetworkUtil {

public static int TYPE_WIFI = 1;
   public static int TYPE_MOBILE = 2;
   public static int TYPE_NOT_CONNECTED = 0;
    
    
   public static int getConnectivityStatus(Context context) {
       ConnectivityManager cm = (ConnectivityManager) context
               .getSystemService(Context.CONNECTIVITY_SERVICE);
 
       NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
       if (null != activeNetwork) {
           if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
               return TYPE_WIFI;
            
           if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
               return TYPE_MOBILE;
       } 
       return TYPE_NOT_CONNECTED;
   }
    
   public static String getConnectivityStatusString(Context context) {
       int conn = NetworkUtil.getConnectivityStatus(context);
       String status = null;
       if (conn == NetworkUtil.TYPE_WIFI) {
           status = "Wifi enabled";
       } else if (conn == NetworkUtil.TYPE_MOBILE) {
           status = "Mobile data enabled";
       } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
           status = "Not connected to Internet";
       }
       return status;
   }
}


  • If you get some error,than press Ctrl + Shift + O. It will import missing inbuilt library.
  • Create new java class file and named it, NetworkChangeReceiver.java and write down below code. It extends BroadcastReceiver. We have already registered it on AndroidMenifest.xml file.

NetworkChangeReceiver.java



import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class NetworkChangeReceiver extends BroadcastReceiver{

@Override
   public void onReceive(final Context context, final Intent intent) {
 
       String status = NetworkUtil.getConnectivityStatusString(context);
 
       Toast.makeText(context, status, Toast.LENGTH_LONG).show();
   }
}

  • Now run this project and get output. Remember that for Wifi result run it on real device. It may not give the gesult of WIFI Connectivity.

Monday, September 9, 2013

ShakeListener Example

Android device has advance function,It has hardware to detect shake event.It can also detect the direction of shaking device.This advance function measure the value of X, Y and Z direction.Screenshot of Shake Listener is given below.

How to Develop ?

  • Create one Project named "ShakeListener".
  • Insert below code in activity_main.xml file which is stored in res/layout directory of project folder.

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

        <TableLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:stretchColumns="0|1">
        
                <TableRow>
                
                        <TextView
                                android:text="X :"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="right"/>
                
                        <TextView
                                android:id="@+id/x"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="left"/>
                
                </TableRow>
        
                <TableRow>
                
                        <TextView
                                android:text="Y :"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="right"/>
                
                        <TextView
                                android:id="@+id/y"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="left"/>
                
                </TableRow>
        
                <TableRow>
                
                        <TextView
                                android:text="Z :"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="right"/>
                
                        <TextView
                                android:id="@+id/z"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="left"/>
                
                </TableRow>
        
                <TableRow>
                
                        <TextView
                                android:text="aX :"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="right"/>
                
                        <TextView
                                android:id="@+id/ax"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="left"/>
                
                </TableRow>
        
                <TableRow>
                
                        <TextView
                                android:text="aY :"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="right"/>
                
                        <TextView
                                android:id="@+id/ay"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="left"/>
                
                </TableRow>
        
                <TableRow>
                
                        <TextView
                                android:text="aZ"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="right"/>
                
                        <TextView
                                android:id="@+id/az"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="left"/>
                
                </TableRow>
                
        </TableLayout>

</LinearLayout>



  • Now Open MainActivity.java file and insert Following code in it.

MainActivity.java

public class MainActivity extends Activity implements SensorEventListener {
    
        SensorManager sensorManager = null;
    private TextView x, y, z, ax, ay, az;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        setContentView(R.layout.activity_main);
        // initialize display
        x = (TextView) findViewById(R.id.x);
        y = (TextView) findViewById(R.id.y);
        z = (TextView) findViewById(R.id.z);
        ax = (TextView) findViewById(R.id.ax);
        ay = (TextView) findViewById(R.id.ay);
        az = (TextView) findViewById(R.id.az);
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this, 
                        sensorManager.getDefaultSensor(SensorManager.SENSOR_ORIENTATION),
                SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(this, 
                        sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_GAME);
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        sensorManager.unregisterListener(this, 
                        sensorManager.getDefaultSensor(SensorManager.SENSOR_ORIENTATION));
        sensorManager.unregisterListener(this, 
                        sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER));
    }
    
        public void onAccuracyChanged(Sensor sensor, int accuracy) {}
        
        public void onSensorChanged(SensorEvent event) {
                synchronized (this) {
                switch (event.sensor.getType()) {
                        case SensorManager.SENSOR_ORIENTATION :
                                x.setText(String.valueOf(event.values[SensorManager.DATA_X]));
                                y.setText(String.valueOf(event.values[SensorManager.DATA_Y]));
                                z.setText(String.valueOf(event.values[SensorManager.DATA_Z]));
                                break;
                        case SensorManager.SENSOR_ACCELEROMETER :
                                ax.setText(String.valueOf(event.values[SensorManager.DATA_X]));
                                ay.setText(String.valueOf(event.values[SensorManager.DATA_Y]));
                                az.setText(String.valueOf(event.values[SensorManager.DATA_Z]));
                                break;
                }           
        }
        } 
        
}


  • If you get few errors then press CTRL+SHIFT+O. It imports all missing libraries.
  • That's It. Now run the project.

Get Full Source Code: FREE




Accelerometer full source code

Accelerometer in android, the value would show acceleration in X, Y and Z direction.Sample code is available in SDK manager.If you can't see it,Don't worry. Here is the full source code is available. 



Download Full Source Code:  FREE




Friday, September 6, 2013

Send Mail Automatically without Intent Tutorial

You can use intent to send mail.It uses inbuilt Email application to send mail.You can also send mail without using inbuilt email application.You need to have knowledge of SMTP (Simple Mail Transfer Protocol). There are many libraries available for send mail automatically.I use some of that for this tutorial.

Before we begin you need to download few library files and java class files.


  1. Auto send Mail Libraries
  2. Java Class Files

After Download above RAR, Extract it.

Here is the full description of project below, I will go through step by step.


  • Create android project named "SendEmailAuto".
  • Now Add library files (Above First Link) to your project (Right click your project > Properties > Java Build Path > Libraries > Add External JARs. Now Go to Order and Export Tab > Checked all JARs and press OK button)
  • Add Java class files (Above second link) into project src folder.Your Project Hierarchy is look like:



  • Now add following code in activity_main.xml

activity_main.xml



<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="25dp" >

        <EditText
            android:id="@+id/etemail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Enter Your Email ID"
            android:inputType="textEmailAddress"
            android:lines="1" />

        <EditText
            android:id="@+id/etPass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Enter Your Password"
            android:inputType="textPassword"
            android:lines="1" />

        <Button
            android:id="@+id/btnCompose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Compose" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="invisible"
            android:id="@+id/composeLinear"
            android:orientation="vertical" >

            <EditText
                android:id="@+id/etTo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="To"
                android:lines="1" >

                <requestFocus />
            </EditText>

            <EditText
                android:id="@+id/etSubject"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="Subject"
                android:lines="1" />

            <EditText
                android:id="@+id/etBody"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:gravity="left|top"
                android:hint="Enter Text Here"
                android:lines="10" />

            <Button
                android:id="@+id/btnSend"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Send" />
        </LinearLayout>
    </LinearLayout>

</ScrollView>


  • Add following code in MainActivity.java

MainActivity.java


public class MainActivity extends Activity {

Button btnSend,btnCompose;
EditText etemailId,etPass,etTo,etSub,etBody;
String emailId,spass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSend = (Button)findViewById(R.id.btnSend);
btnCompose = (Button)findViewById(R.id.btnCompose);
etemailId = (EditText)findViewById(R.id.etemail);
etPass = (EditText)findViewById(R.id.etPass);
etTo = (EditText)findViewById(R.id.etTo);
etSub = (EditText)findViewById(R.id.etSubject);
etBody = (EditText)findViewById(R.id.etBody);
final LinearLayout layout= (LinearLayout)findViewById(R.id.composeLinear);
btnSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String sub = etSub.getText().toString();
String to = etTo.getText().toString();
String body = etBody.getText().toString();
try {   
       GmailSender sender = new GmailSender(emailId, spass);
       sender.sendMail(sub,body,emailId,to);  
       Toast.makeText(getApplicationContext(),"Mail has been sent.",Toast.LENGTH_SHORT).show();
   } catch (Exception e) {   
    Toast.makeText(getApplicationContext(),"Error! Try again later.",Toast.LENGTH_SHORT).show();
   }
}
});
btnCompose.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
emailId = etemailId.getText().toString();
spass = etPass.getText().toString();
if(emailId.equals("") || spass.equals("")){
Toast.makeText(getApplicationContext(),"Email ID and Password fields are mandatory.",Toast.LENGTH_SHORT).show();
}else{
layout.setVisibility(View.VISIBLE);
}
}
});
}
}

  • If you get error,Don't worry. Just press Ctrl + Shift + O button. It will import all missing libraries.
  • Don't forget to give internet permission in AndroidMenifest.xml file.
  • Open AndroidMenifest.xml file and add below permissions, before <application> tag.

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  • Done ! Now run the project.
NOTE : Don't use Android emulator for testing,It will not work on Android emulator. Use real android device for testing.Before run this project check your emailID and password.  

Download Full Source code : Download


Monday, September 2, 2013

How to play saved video in android?


  • Create android project named "savedVideoView".
  • Now create 'raw' folder in 'res' directory.Note: Do not change the folder name.
  • Add Video file (mp4) which you want to play in application.
  • Now just add following code in activity_main.xml file 

activity_main.xml



<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:minWidth="854dip"
    android:minHeight="480dip"
    >
<VideoView android:id="@+id/welcome"
android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:fitsSystemWindows="true"
    android:minWidth="854dip"
    android:minHeight="480dip"
    >
</VideoView>
</LinearLayout>



  • Add following code in MainActivity.java file.

MainActivity.java



public class MainActivity extends Activity 
{

VideoView vv;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
// it is used to set full screen video
    requestWindowFeature(Window.FEATURE_NO_TITLE);  
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
                                WindowManager.LayoutParams.FLAG_FULLSCREEN);  

    setContentView(R.layout.play_intro);
    vv = (VideoView) findViewById(R.id.welcome);

       
    MediaController mc = new MediaController(this); 
    vv.setMediaController(mc); 
    mc.hide();
          // Here resource is 'video2' video file which is stored in 'raw' directory 
    vv.setVideoURI(Uri.parse("android.resource://com.tumbi/"+R.raw.video2));
   
    vv.start();
   
    vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
   
    @Override
    public void onCompletion(MediaPlayer mp) 
    {
    onPause();
                         // After completion of video it goes to CompleteVideoActivity automatically
    Intent i=new Intent(MainActivity.this,CompleteVideoActivity.class);
    startActivity(i);
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    });
   
}

public void onPause ()
{
super.onPause();
vv.stopPlayback();
}
}

  • Done ! Now run the Project and get the O/P.

how to play youtube video in videoview android ?


how to play youtube video in videoview android ?

You can play youtube video in your application.There is no need to add third party library or other API.


  • First of all create one android project named "VideoViewTube".
  • You need to add VideoView component in your xml file.Open activity_main.xml and add following code:

activity_main.xml



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:minWidth="854dip"
    android:minHeight="480dip"
    >

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fitsSystemWindows="true"
        android:minHeight="480dip"
        android:minWidth="854dip" />

</LinearLayout>


  • If your internet speed is low then It will take some time to play youtube video,Between buffering time and playing time your application UI may freeze.
  • To resolve this issue use Async Task (AsyncTask Tutorial).
  • Open MainActivity.java file and create MyAsyncTask class in below onCreate() method. 
  • MyAsyncTask class extends AsyncTask<Void,Void,Void>,Write following code in MyAsyncTask class.


private class YourAsyncTask extends AsyncTask<Void, Void, Void>
    {
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
            progressDialog = ProgressDialog.show(MainActivity.this, "", "Loading Video wait...", true);
        }

        @Override
        protected Void doInBackground(Void... params)
        {
            try
            {
                String url = "http://www.youtube.com/watch?v=OtLa7wDpuOU";
                videoUrl = getUrlVideoRTSP(url);
                Log.e("Video url for playing=========>>>>>", videoUrl);
            }
            catch (Exception e)
            {
                Log.e("Login Soap Calling in Exception", e.toString());
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result)
        {
            super.onPostExecute(result);
            progressDialog.dismiss();
        
            videoView.setVideoURI(Uri.parse(videoUrl));
            MediaController mc = new MediaController(MainActivity.this);
            videoView.setMediaController(mc);
            videoView.requestFocus();
            videoView.start();          
            mc.show();
        }

    }


  •  Now you get one error in  getUrlVideoRTSP(url).It is because youtube video is RTSP type videos RTSP means Real Time Streaming Protocol.We need to get Video URL from RTSP.
  • Add following two methods below MyAsyncTask class. getUrlVideoRTSP(String urlYoutube); and extractYoutubeId(String url) 


public static String getUrlVideoRTSP(String urlYoutube)
    {
        try
        {
            String gdy = "http://gdata.youtube.com/feeds/api/videos/";
            DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            String id = extractYoutubeId(urlYoutube);
            URL url = new URL(gdy + id);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            Document doc = documentBuilder.parse(connection.getInputStream());
            Element el = doc.getDocumentElement();
            NodeList list = el.getElementsByTagName("media:content");///media:content
            String cursor = urlYoutube;
            for (int i = 0; i < list.getLength(); i++)
            {
                Node node = list.item(i);
                if (node != null)
                {
                    NamedNodeMap nodeMap = node.getAttributes();
                    HashMap<String, String> maps = new HashMap<String, String>();
                    for (int j = 0; j < nodeMap.getLength(); j++)
                    {
                        Attr att = (Attr) nodeMap.item(j);
                        maps.put(att.getName(), att.getValue());
                    }
                    if (maps.containsKey("yt:format"))
                    {
                        String f = maps.get("yt:format");
                        if (maps.containsKey("url"))
                        {
                            cursor = maps.get("url");
                        }
                        if (f.equals("1"))
                            return cursor;
                    }
                }
            }
            return cursor;
        }
        catch (Exception ex)
        {
            Log.e("Get Url Video RTSP Exception======>>", ex.toString());
        }
        return urlYoutube;

    }

protected static String extractYoutubeId(String url) throws MalformedURLException    {        String id = null;
        try
        {
            String query = new URL(url).getQuery();
            if (query != null)
            {
                String[] param = query.split("&");
                for (String row : param)
                {
                    String[] param1 = row.split("=");
                    if (param1[0].equals("v"))
                    {
                        id = param1[1];
                    }
                }
            }
            else
            {
                if (url.contains("embed"))
                {
                    id = url.substring(url.lastIndexOf("/") + 1);
                }
            }
        }
        catch (Exception ex)
        {
            Log.e("Exception", ex.toString());
        }
        return id;
    }


  • Now just define VideoView and call AsyncTask Class in onCreate() Method.

MainActivity.java


public class MainActivity extends Activity {
VideoView videoView;
String videoUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView)findViewById(R.id.videoView);
new YourAsyncTask().execute();
}


  • At last write onPause method in bottom of MainActivity.java class
public void onPause ()
{
super.onPause();
videoView.stopPlayback();
}


The Completed MainActivity.java Class is : Part 2

Get Full Suorce Code: Here