Ir al contenido principal

Android - Basic Steps (Service)

Service

  • Run in the main thread of the hosting application
  • Android can kill the Service if need the resources

Purpose

  • Supporting inter-application method execution
  • Performing background processing
Start a Service
  • Call Context.startService(Intent intent)\
  • To call from a Fragment use
    • getActivity().getApplicationContext().startService( intentService);

Executing the service
  • After call startService(...) 
    • In the Service is executed the method onStartCommand(...)
  • If the method returns the constant START_NOT_STICKY
    • then Android will not restart the service automatically if the the process is killedp
Foreground

  • To execute the service foreground call the method startForeground()
    • Use this if the user is aware of the process


Bind to a Service
  • Call the method Context.bindService(
    • Intent service
    • ServiceConnection con
    • int flags
    • )

Send Toast from the Service

  • On the method onStartCommand receive the message

        public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(), intent.getStringExtra(MSG),
Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}

Binding to Remote Services

When the client is running in a different thread


Communication
  • Using Messenger class
    • Manage a Hanlder
    • Messages can be sent across process boundaries
    • Messages are queued and process sequencially
Implementing Messages
  • Service 
    • Creates a Handler for processing the messages
    • Creates a messenger that provides a binder to a client
  • Client
    • Use the binder to create its own messenger
    • Send the messages to the service
Implementing AIDL

Using AIDL interface


  • Define remote interface in AIDL (Android Interface Definition Language)
    • Declare in .AIDL file
    • AIDL defines how components can interact with the service
  • Implement remote interface
  • Implement Service methods
  • Implement Client methods

AIDL Syntaxis

  • Is like Java interface
  • Cannot declare static fields
  • Non-primitive remote method parameters require a directional tag
    • in - transferred to the remote method
    • out - return to the caller
    • inout - for both

Data Types
  • Java Primitive Types
  • Oher AIDL (Generated interfaces)
  • Classes that implement Parcelable Protocol
  • List
    • Generic List Supported
  • Map
    • Generic Map is not supported

Considerations
  • When create the intent to invoke the AIDL server do it like
    • Intent intent = new Intent(KeyGeneratorAidl.class.getName());
    • Where KeyGeneratorAidl is the server class

Comentarios

Entradas populares de este blog

Android - Basic Steps (Location & Maps)

Location Is composed by Latitude Longitude Time-stamp Accuracy Altitude Speed Bearing LocationProvider Types: Network  Wifi access points Cell phone towers GPS Passive Piggyback on the readings requested by other application Permissions Network  android.permission.ACCESS_COARSE_LOCATION android.permission.ACCESS_FINE_LOCATION GPS android.permission.ACCESS_FINE_LOCATION Passive Provider android.permission.ACCESS_FINE_LOCATION LocationManager System service for accessing location data getSystemService( Context.LOCATION_SERVICE ) Functions Determine the last known user location Register for location update Register to receive intents when the device nears or move away from a given geographic area LocationListener Defines callbacks methods that are called when Location or LocationProvider status change. Methods onLocationChanged(...) onProviderDisabled(...) onProviderEnabled(...) onStatusChan...

Android - Basic Steps (Sensors)

Sensors There are three types: Motion Position Environment ServiceManager Get a reference with   getSystemService(Context.SENSOR_SERVICE) Get a specific sensor SensorManager.getDefaultSensor(int type) Sensor Types Sensor.TYPE_ACCELEROMETER Sensor.TYPE_MAGNETIC_FIELD Sensor.TYPE_PRESSURE SensorEventListener Interface for SensorEvent callback When the accuracy has changed onAccuracyChanged() When has a new value onSensorChanged() SensorManager To register or unregister SensorEvents registerListener() unregisterListener() SensorEvents Include Data is sensor Sensor Type time-stamp Accuracy Measurement data Filters Low-pass Deemphasize transient force changes Emphasize constant force components Example Carpenter's level High-pass Emphasize transient force changes Deemphasize  constant force components Example Percussion instrument