Android Open Source - BleSensorTag Ble Service






From Project

Back to project page BleSensorTag.

License

The source code is released under:

MIT License

If you think the Android project BleSensorTag listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package sample.ble.sensortag;
/*from  w w w.  j  av  a2  s  .c  om*/
import android.app.Service;
import android.bluetooth.BluetoothGattService;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import sample.ble.sensortag.ble.BleManager;
import sample.ble.sensortag.ble.BleServiceListener;
import sample.ble.sensortag.config.AppConfig;
import sample.ble.sensortag.sensor.TiSensor;

import java.util.List;

/**
 * Service for managing connection and data communication with a GATT server hosted on a
 * given Bluetooth LE device.
 */
public class BleService extends Service implements BleServiceListener {
    @SuppressWarnings("UnusedDeclaration")
    private final static String TAG = BleService.class.getSimpleName();

    private final static String INTENT_PREFIX = BleService.class.getPackage().getName();
    public final static String ACTION_GATT_CONNECTED = INTENT_PREFIX+".ACTION_GATT_CONNECTED";
    public final static String ACTION_GATT_DISCONNECTED = INTENT_PREFIX+".ACTION_GATT_DISCONNECTED";
    public final static String ACTION_GATT_SERVICES_DISCOVERED = INTENT_PREFIX+".ACTION_GATT_SERVICES_DISCOVERED";
    public final static String ACTION_DATA_AVAILABLE = INTENT_PREFIX+".ACTION_DATA_AVAILABLE";
    public final static String EXTRA_SERVICE_UUID = INTENT_PREFIX+".EXTRA_SERVICE_UUID";
    public final static String EXTRA_CHARACTERISTIC_UUID = INTENT_PREFIX+".EXTRA_CHARACTERISTIC_UUI";
    public final static String EXTRA_DATA = INTENT_PREFIX+".EXTRA_DATA";
    public final static String EXTRA_TEXT = INTENT_PREFIX+".EXTRA_TEXT";

    public class LocalBinder extends Binder {
        public BleService getService() {
            return BleService.this;
        }
    }

    private final IBinder binder = new LocalBinder();

    private final Handler uiThreadHandler = new Handler(Looper.getMainLooper());
    private final BleManager bleManager = new BleManager();
    private BleServiceListener serviceListener;

    @Override
    public void onCreate() {
        super.onCreate();

        bleManager.setServiceListener(this);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        // After using a given device, you should make sure that BluetoothGatt.close() is called
        // such that resources are cleaned up properly.  In this particular example, close() is
        // invoked when the UI is disconnected from the Service.
        bleManager.close();
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        bleManager.disconnect();
        bleManager.close();
    }

    public void updateSensor(TiSensor<?> sensor) {
        bleManager.updateSensor(sensor);
    }

    public BleManager getBleManager() {
        return bleManager;
    }

    public void setServiceListener(BleServiceListener listener) {
        serviceListener = listener;
    }

    /**
     * Enables or disables notification on a give characteristic.
     *
     * @param sensor sensor to be enabled/disabled
     * @param enabled If true, enable notification.  False otherwise.
     */
    public void enableSensor(TiSensor<?> sensor, boolean enabled) {
        bleManager.enableSensor(sensor, enabled);
    }

    /**
     * Retrieves a list of supported GATT services on the connected device. This should be
     * invoked only after {@code BluetoothGatt#discoverServices()} completes successfully.
     *
     * @return A {@code List} of supported services.
     */
    public List<BluetoothGattService> getSupportedGattServices() {
        return bleManager.getSupportedGattServices();
    }

    @Override
    public void onConnected() {
        broadcastUpdate(ACTION_GATT_CONNECTED);
        uiThreadHandler.post(new Runnable() {
            @Override
            public void run() {
                if (serviceListener != null)
                    serviceListener.onConnected();
            }
        });
    }

    @Override
    public void onDisconnected() {
        broadcastUpdate(ACTION_GATT_DISCONNECTED);
        uiThreadHandler.post(new Runnable() {
            @Override
            public void run() {
                if (serviceListener != null)
                    serviceListener.onDisconnected();
            }
        });
    }

    @Override
    public void onServiceDiscovered() {
        broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);

        uiThreadHandler.post(new Runnable() {
            @Override
            public void run() {
                if (serviceListener != null)
                    serviceListener.onServiceDiscovered();
            }
        });
    }

    @Override
    public void onDataAvailable(final String serviceUuid, final String characteristicUuid,
                                final String text, final byte[] data) {
        final Intent intent = new Intent(ACTION_DATA_AVAILABLE);
        intent.putExtra(EXTRA_SERVICE_UUID, serviceUuid);
        intent.putExtra(EXTRA_CHARACTERISTIC_UUID, characteristicUuid);
        intent.putExtra(EXTRA_TEXT, text);
        intent.putExtra(EXTRA_DATA, data);

        if (AppConfig.REMOTE_BLE_SERVICE)
            sendBroadcast(intent);
        uiThreadHandler.post(new Runnable() {
            @Override
            public void run() {
                if (serviceListener != null)
                    serviceListener.onDataAvailable(serviceUuid, characteristicUuid, text, data);
            }
        });
    }

    private void broadcastUpdate(final String action) {
        if (!AppConfig.REMOTE_BLE_SERVICE)
            return;

        final Intent intent = new Intent(action);
        sendBroadcast(intent);
    }
}




Java Source Code List

sample.ble.sensortag.BleSensorsRecordService.java
sample.ble.sensortag.BleServiceBindingActivity.java
sample.ble.sensortag.BleService.java
sample.ble.sensortag.BluetoothStateReciever.java
sample.ble.sensortag.DeviceScanActivity.java
sample.ble.sensortag.DeviceServicesActivity.java
sample.ble.sensortag.adapters.BleDevicesAdapter.java
sample.ble.sensortag.adapters.TiServicesAdapter.java
sample.ble.sensortag.ble.BleActionsReceiver.java
sample.ble.sensortag.ble.BleDevicesScanner.java
sample.ble.sensortag.ble.BleExecutorListener.java
sample.ble.sensortag.ble.BleGattExecutor.java
sample.ble.sensortag.ble.BleManager.java
sample.ble.sensortag.ble.BleServiceListener.java
sample.ble.sensortag.ble.BleUtils.java
sample.ble.sensortag.config.AppConfig.java
sample.ble.sensortag.dialogs.AppDialog.java
sample.ble.sensortag.dialogs.EnableBluetoothDialog.java
sample.ble.sensortag.dialogs.ErrorDialog.java
sample.ble.sensortag.fusion.SensorFusionActivity.java
sample.ble.sensortag.fusion.SensorFusionFragment.java
sample.ble.sensortag.fusion.engine.SensorFusionEngine.java
sample.ble.sensortag.fusion.engine.SensorFusionHelper.java
sample.ble.sensortag.fusion.sensors.AndroidSensorManager.java
sample.ble.sensortag.fusion.sensors.AndroidSensor.java
sample.ble.sensortag.fusion.sensors.BleSensorManager.java
sample.ble.sensortag.fusion.sensors.BleSensor.java
sample.ble.sensortag.fusion.sensors.ISensorManager.java
sample.ble.sensortag.fusion.sensors.ISensor.java
sample.ble.sensortag.fusion.sensors.SensorManagerException.java
sample.ble.sensortag.gl.GLSurfaceView.java
sample.ble.sensortag.gl.GlFragment.java
sample.ble.sensortag.gl.ModelLoader.java
sample.ble.sensortag.gl.ModelRenderer.java
sample.ble.sensortag.info.TiDeviceInfoSerivce.java
sample.ble.sensortag.info.TiGapSerivce.java
sample.ble.sensortag.info.TiGattSerivce.java
sample.ble.sensortag.info.TiInfoService.java
sample.ble.sensortag.info.TiInfoServices.java
sample.ble.sensortag.sensor.TiAccelerometerSensor.java
sample.ble.sensortag.sensor.TiGyroscopeSensor.java
sample.ble.sensortag.sensor.TiHumiditySensor.java
sample.ble.sensortag.sensor.TiKeysSensor.java
sample.ble.sensortag.sensor.TiMagnetometerSensor.java
sample.ble.sensortag.sensor.TiPeriodicalSensor.java
sample.ble.sensortag.sensor.TiPressureSensor.java
sample.ble.sensortag.sensor.TiRangeSensors.java
sample.ble.sensortag.sensor.TiSensorUtils.java
sample.ble.sensortag.sensor.TiSensor.java
sample.ble.sensortag.sensor.TiSensors.java
sample.ble.sensortag.sensor.TiTemperatureSensor.java
sample.ble.sensortag.sensor.TiTestSensor.java