Quantcast
Channel: Android Programming Tutorials » Android Apps
Viewing all articles
Browse latest Browse all 13

Remote Service Client Example

$
0
0

This example will show you how to handle and invoke remote service from client.

Algorithm:

1.) Create a new project by File-> New -> Android Project name it RemoteServiceClientExample.

2.) Write following into 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"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/welcome"
    />
<Button android:id="@+id/startButton"
	android:text="@string/startButton"
	android:layout_gravity="center_horizontal"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	>
	</Button>
<Button android:id="@+id/stopButton"
	android:text="@string/stopButton"
	android:layout_gravity="center_horizontal"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	>
	</Button>
<Button android:id="@+id/bindButton"
	android:text="@string/bindButton"
	android:layout_gravity="center_horizontal"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	>
	</Button>
<Button android:id="@+id/releaseButton"
	android:text="@string/releaseButton"
	android:layout_gravity="center_horizontal"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	>
	</Button>
<Button android:id="@+id/invokeButton"
	android:text="@string/invokeButton"
	android:layout_gravity="center_horizontal"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	>
	</Button>
<TextView android:id="@+id/notApplicable"
	android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/notApplicable" />	
<TextView android:id="@+id/serviceStatus"
	android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/serviceStatus" />

</LinearLayout>

3.) Import com.example.remoteserviceexample into src. (check another blogpost RemoteServiceExample for this)
4.) Run for output.

Steps:

1.) Create a project named RemoteServiceClientExample and set the information as stated in the image.

Build Target: Android 4.2
Application Name: RemoteServiceClientExample
Package Name: com. RemoteServiceClientExample
Activity Name: RemoteServiceClientExample
Min SDK Version: 4.2

2.) Open RemoteServiceClientExample.java file and write following code there:

package com.example.remoteserviceclient;

import com.example.remoteserviceexample.IMyRemoteService;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class RemoteServiceClientExample extends Activity {
	private IMyRemoteService remoteService;
	private boolean started = false;
	private RemoteServiceConnection conn = null;
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button start = (Button)findViewById(R.id.startButton);
        Button stop = (Button)findViewById(R.id.stopButton);
        Button bind = (Button)findViewById(R.id.bindButton);
        Button release = (Button)findViewById(R.id.releaseButton);
        Button invoke = (Button)findViewById(R.id.invokeButton);
        
        start.setOnClickListener(new OnClickListener() {
        	public void onClick(View v){
        		startService();
        	}
        });
        
        stop.setOnClickListener(new OnClickListener() {
        	public void onClick(View v){
        		stopService();
        	}
        });       
        
        bind.setOnClickListener(new OnClickListener() {
        	public void onClick(View v){
        		bindService();
        	}
        });  
        
        release.setOnClickListener(new OnClickListener() {
        	public void onClick(View v){
        		releaseService();
        	}
        });          
        
        invoke.setOnClickListener(new OnClickListener() {
        	public void onClick(View v){
        		invokeService();
        	}
        });          

   
    }
    
    private void startService(){
       		if (started) {
       			Toast.makeText(RemoteServiceClientExample.this, "Service already started", Toast.LENGTH_SHORT).show();
       		} else {
       			Intent i = new Intent();
       			i.setClassName("com.example.remoteserviceexample", "com.example.remoteserviceexample.RemoteService");
       			startService(i);
       			started = true;
       			updateServiceStatus();
       			Log.d( getClass().getSimpleName(), "startService()" );
       		}
       		
    }
       
    private void stopService() {
      		if (!started) {
       			Toast.makeText(RemoteServiceClientExample.this, "Service not yet started", Toast.LENGTH_SHORT).show();
      		} else {
       			Intent i = new Intent();
       			i.setClassName("com.example.remoteserviceexample", "com.example.remoteserviceexample.RemoteService");
       			stopService(i);
       			started = false;
       			updateServiceStatus();
       			Log.d( getClass().getSimpleName(), "stopService()" );
      		}
    }
      
    private void bindService() {
        		if(conn == null) {
        			conn = new RemoteServiceConnection();
        			Intent i = new Intent();
        			i.setClassName("com.example.remoteserviceexample", "com.example.remoteserviceexample.RemoteService");
        			bindService(i, conn, Context.BIND_AUTO_CREATE);
        			updateServiceStatus();
        			Log.d( getClass().getSimpleName(), "bindService()" );
        		} else {
        	        Toast.makeText(RemoteServiceClientExample.this, "Cannot bind - service already bound", Toast.LENGTH_SHORT).show();
        		}
    }
        
    private void releaseService() {
        		if(conn != null) {
        			unbindService(conn);
        			conn = null;
        			updateServiceStatus();
        			Log.d( getClass().getSimpleName(), "releaseService()" );
        		} else {
        			Toast.makeText(RemoteServiceClientExample.this, "Cannot unbind - service not bound", Toast.LENGTH_SHORT).show();
        		}
    }
        
    private void invokeService() {
        		if(conn == null) {
        			Toast.makeText(RemoteServiceClientExample.this, "Cannot invoke - service not bound", Toast.LENGTH_SHORT).show();
        		} else {
        			try {
        				int counter = remoteService.getCounter();
        				  TextView t = (TextView)findViewById(R.id.notApplicable);
        				  t.setText( "Counter value: "+Integer.toString( counter ) );
        				  Log.d( getClass().getSimpleName(), "invokeService()" );
        			} catch (RemoteException re) {
        				Log.e( getClass().getSimpleName(), "RemoteException" );
        			}
        		}
       	}	        	

      
      class RemoteServiceConnection implements ServiceConnection {
          public void onServiceConnected(ComponentName className, 
  			IBinder boundService ) {
            remoteService = IMyRemoteService.Stub.asInterface((IBinder)boundService);
            Log.d( getClass().getSimpleName(), "onServiceConnected()" );
          }

          public void onServiceDisconnected(ComponentName className) {
            remoteService = null;
  		   updateServiceStatus();
  		   Log.d( getClass().getSimpleName(), "onServiceDisconnected" );
          }
      };
      
      private void updateServiceStatus() {
    	  String bindStatus = conn == null ? "unbound" : "bound";
    	  String startStatus = started ? "started" : "not started";
    	  String statusText = "Service status: "+
    							bindStatus+
    							","+
    							startStatus;
    	  TextView t = (TextView)findViewById( R.id.serviceStatus);
    	  t.setText( statusText );	  
    	}
      
      protected void onDestroy() {
    	  super.onDestroy();
    	  releaseService();
    	  Log.d( getClass().getSimpleName(), "onDestroy()" );
      }
 }

5.) Compile and build the project.

Output


Viewing all articles
Browse latest Browse all 13

Trending Articles