Sunday, 3 April 2011

Android Service - Bounded - Activity example

package com.jiahaoliuliu.android.services.bounded;

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.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AndroidWatcher extends Activity {


    /** Called when the activity is first created. */
   
    Button bindService;
    Button unbindService;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        bindService = (Button)findViewById(R.id.bindService);
        bindService.setOnClickListener(new View.OnClickListener() {
           
            @Override
            public void onClick(View v) {
                doBindService();
            }
        });
       
        unbindService = (Button)findViewById(R.id.unbindService);
        unbindService.setOnClickListener(new View.OnClickListener() {
           
            @Override
            public void onClick(View v) {
                doUnbindService();
            }
        });
        Log.i("AndroidWatcher", "onCreate");
        Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();
    }
   
        private LocalService mBoundService;
        private boolean mlsBound = false;
       
        private ServiceConnection mConnection = new ServiceConnection() {
            public void onServiceConnected (ComponentName className, IBinder service) {
                /**
                 * This is called when the connection with the service has been
                 * established, giving us the service object we can use to
                 * interact with the service. Because we have bound to a explicit
                 * service that we know is running in our own process, we can
                 * cast its IBinder to a concrete class and directly access it
                 */
                mBoundService = ((LocalService.LocalBinder)service).getService();
               
                //Tell the user about this for our demo.
                /*
                Toast.makeText(AndroidWatcher.this,
                        "Service Connected", Toast.LENGTH_SHORT).show();
                */
            }
           
            public void onServiceDisconnected (ComponentName className) {
                /**
                 * This is called when the connection with the service has been
                 * unexpectedly disconnected -- that is, its process crashed.
                 * Because it is running in our same process, we should never
                 * see this happen
                 */
                mBoundService = null;
                /*Toast.makeText(AndroidWatcher.this,
                        "Service Disconnected", Toast.LENGTH_LONG).show();
                */
            }
        };
       
        void doBindService() {
            /**
             * Establish a connection with the service. We use an explicit
             * class name because we want a specific service implementation that
             * we know will be running in our own process (and thus won't be
             * supporting component replacement by other applications
             */
            bindService(new Intent (AndroidWatcher.this,
                    LocalService.class), mConnection, Context.BIND_AUTO_CREATE);
            mlsBound = true;
        }
       
        void doUnbindService() {
            if (mlsBound) {
                //Detach out existing connection
                unbindService (mConnection);
                mlsBound = false;
            }
        }
}

No comments:

Post a Comment