Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓服务_Android_Service_Android Service - Fatal编程技术网

Android 安卓服务

Android 安卓服务,android,service,android-service,Android,Service,Android Service,我想销毁服务。我的服务正在后台运行。我正在调用stopService(Intent)方法。但这没用。 如何从android中的另一个服务绑定和解除绑定服务 这是我的活动。我从HomeActivity开始服务,即SeviceToStartBackgroundService.class。这里我想检查服务是否正在运行,如果正在运行,那么我想停止服务 package com.example.tracker.activity; import android.content.Intent; import

我想销毁
服务
。我的
服务
正在后台运行。我正在调用
stopService(Intent)
方法。但这没用。 如何从android中的另一个服务绑定和解除绑定
服务

这是我的活动。我从HomeActivity开始服务,即SeviceToStartBackgroundService.class。这里我想检查服务是否正在运行,如果正在运行,那么我想停止服务

package com.example.tracker.activity;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.tracker.R;
import com.example.tracker.service.BLEService;
import com.example.tracker.service.BackgroundService;
import com.example.tracker.service.BluetoothLeService;
import com.example.tracker.service.SeviceToStartBackgroundService;

public class HomeScreenActivity extends AppCompatActivity  {

    String TAG="HomeScreenActivity";

    public static  Intent intent,intent2;
    private Intent bluetoothIntent;
    int i=1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_screen);
    }

    @Override
    protected void onResume() {
        super.onResume();
        stopServiceMethod();
        startService(new Intent(getApplicationContext(),SeviceToStartBackgroundService.class));
    }

    public void stopServiceMethod(){

        Log.e(TAG,"stopServiceMethod()");
        stopService(new Intent(this, BackgroundService.class));
        stopService(new Intent(this, SeviceToStartBackgroundService.class));
        stopService(new Intent(this, BluetoothLeService.class));
        stopService(new Intent(this, BLEService.class));
    }
}
这是我的SeviceToStartBackgroundService.class。当我从最近的应用程序中删除该应用程序时,将调用onTaskRemoved(Intent rootIntent)方法。还有一个服务开始了,即BackgroundService.class

package com.example.tracker.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;


public class SeviceToStartBackgroundService extends Service {
    String TAG="SeviceToStartBService";
    private BluetoothLeService mBluetoothLeService;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

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

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        Log.e(getClass().getName(), "App just got removed from Recents!");
        startService(new Intent(getApplicationContext(),BackgroundService.class));        
    }

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

}
这是我的背景服务课。当应用进入用户交互(前端)时,我想停止此服务

package com.example.tracker.service;
导入android.app.Service;
导入android.bluetooth.BluetoothAdapter;
导入android.bluetooth.bluetooth设备;
导入android.bluetooth.BluetoothGatt;
导入android.bluetooth.BluetoothGattCharacteristic;
导入android.bluetooth.BluetoothGattService;
导入android.bluetooth.BluetoothManager;
导入android.bluetooth.le.BluetoothLeScanner;
导入android.bluetooth.le.ScanFilter;
导入android.bluetooth.le.ScanSettings;
导入android.content.BroadcastReceiver;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.content.ServiceConnection;
导入android.content.pm.PackageManager;
导入android.net.Uri;
导入android.os.Handler;
导入android.os.IBinder;
导入android.support.annotation.Nullable;
导入android.util.Log;
导入android.widget.Toast;
导入com.example.tracker.R;
导入com.example.tracker.utils.SampleGattAttributes;
导入com.example.tracker.utils.SharedReferencesutils;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.UUID;
导入静态android.R.attr.delay;
导入静态com.shalaka.tracker.constant.SharedReferencesConstant.KEY\u SP\u MOBILE\u号码;
/**
*绿灯笼于2017年9月12日创作。
*/
公共类后台服务扩展服务{
Handler handlerScan=新处理程序();
私隐期;
语境;
公共静态字符串TAG=“BackgroundService”;
私人蓝牙适配器mBluetoothAdapter;
私有布尔扫描;
私有处理程序mHandler=新处理程序();
公共字符串[]advDataTypes=新字符串[256];
ArrayList bluetoothDeviceArrayList=新的ArrayList();
ArrayList BluetoothDeviceArrayList two=新的ArrayList();
私有静态最终整数请求_ENABLE_BT=1;
/*--------------连接到BLE-----------------------------------------------*/
蓝牙GATTSERVICE GATTSERVICE 4;
公共静态数组列表特性;
//AlertDialog.Builder AlertDialog;
专用浮点数avgRssi=0.0f;
//私人对话;
公共静态蓝牙服务mBluetoothLeService;
私有布尔值mConnected=false;
private ArrayList mGattCharacteristics=new ArrayList();
//服务和字符uuid
专用静态最终整数跟踪器_开_关=2;
专用静态最终UUID跟踪器\u Triple\u PRESS\u SERVICE=UUID.fromString(“edfec62e-9910-0bac-5241-d8bda6932a2f”);
专用静态最终UUID跟踪器\u Triple\u PRESS\u CHAR=UUID.fromString(“772ae377-b3d2-4f8e-4042-5481d1e0098c”);
私有静态最终UUID立即\警报\ UUID=UUID.fromString(“00001802-0000-1000-8000-00805f9b34fb”);
专用静态最终UUID警报\级别\ UUID=UUID.fromString(“00002a06-0000-1000-8000-00805f9b34fb”);
公共静态字符串连接状态;
/*-------------------------------------------------------------------------------*/
公共静态最终字符串PREFS_NAME=“PreferencesFile”;
公共字符串[]mData=新字符串[400];
/*--------对于>21--------------*/
私人蓝牙扫描仪;
私人扫描设置;
私有列表过滤器;
私人蓝牙GATT mGatt;
公共背景服务(){
}
公共背景服务(上下文){
this.context=上下文;
}
@可空
@凌驾
公共IBinder onBind(意向){
返回null;
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
int延迟=10000;
//获取系统默认铃声
handlerScan.postDelayed(新的Runnable(){
@凌驾
公开募捐{
IntentFilter IntentFilter=新的IntentFilter();
intentFilter.addAction(BluetoothLeService.ACTION\u GATT\u已连接);
intentFilter.addAction(BluetoothLeService.ACTION\u GATT\u已断开连接);
intentFilter.addAction(BluetoothLeService.ACTION\u GATT\u SERVICES\u DISCOVERED);
intentFilter.addAction(BluetoothLeService.ACTION\u数据可用);
intentFilter.addAction(BluetoothLeService.ACTION\u GATT\u RSSI\u更新);
intentFilter.addAction(BluetoothLeService.ACTION\u GATT\u WRITE\u失败);
Log.e(标记“OnResume()”);
getApplicationContext().registerReceiver(mGattUpdateReceiver,intentFilter);
getApplicationContext().bindService(新意图(getApplicationContext(),BluetoothLeService.class),mServiceConnection,1);
Toast.makeText(getApplicationContext(),“调用您的方法”,Toast.LENGTH_LONG.show();
//使用此检查确定设备上是否支持BLE。然后您可以
//有选择地禁用可编程逻辑相关功能。
如果(!getPackageManager().hasSystemFeature(PackageManager.FEATURE\u BLUETOOTH\u LE)){
Toast.makeText(上下文,不支持R.string.ble,Toast.LENGTH.SHORT.show();
}
//初始化蓝牙适配器。对于API级别18及以上,请获取对的参考
package com.example.tracker.service;

import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanFilter;
import android.bluetooth.le.ScanSettings;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;

import com.example.tracker.R;
import com.example.tracker.utils.SampleGattAttributes;
import com.example.tracker.utils.SharedPreferencesUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import static android.R.attr.delay;
import static com.shalaka.tracker.constant.SharedFreferencesConstant.KEY_SP_MOBILE_NUMBER;

/**
 * Created by greenlantern on 12/9/17.
 */

public class BackgroundService extends Service{
    Handler handlerScan=new Handler();
    private int scanPeriod;
    Context context;
    public static String TAG="BackgroundService";
    private BluetoothAdapter mBluetoothAdapter;
    private boolean mScanning;
    private Handler  mHandler = new Handler();
    public String[] advDataTypes = new String[256];

    ArrayList<BluetoothDevice> bluetoothDeviceArrayList=new ArrayList<>();
    ArrayList<BluetoothDevice> bluetoothDeviceArrayListTwo=new ArrayList<>();
    private static final int REQUEST_ENABLE_BT = 1;

    /*--------------Connect to BLE-----------------------------------------------*/

    BluetoothGattService gattService4;
    public static ArrayList<BluetoothGattCharacteristic> lastCharacteristic;

   //    AlertDialog.Builder alertDialog;
    private float avgRssi = 0.0f;
    // private Dialog dialog;
    public static BluetoothLeService mBluetoothLeService;
    private boolean mConnected = false;
    private ArrayList<ArrayList<BluetoothGattCharacteristic>> mGattCharacteristics = new ArrayList();

    //service and char uuid
    private static final int TRACKER_ON_OFF = 2;
    private static final UUID TRACER_TRIPPLE_PRESS_SERVICE=UUID.fromString("edfec62e-9910-0bac-5241-d8bda6932a2f");
    private static final UUID TRACKER_TRIPPLE_PRESS_CHAR=UUID.fromString("772ae377-b3d2-4f8e-4042-5481d1e0098c");
    private static final UUID IMMEDIATE_ALERT_UUID = UUID.fromString("00001802-0000-1000-8000-00805f9b34fb");
    private static final UUID ALERT_LEVEL_UUID = UUID.fromString("00002a06-0000-1000-8000-00805f9b34fb");
    public static String connectionStatus;

    /*-------------------------------------------------------------------------------*/

    public static final String PREFS_NAME = "PreferencesFile";
    public String[] mData = new String[400];

    /*--------for > 21--------------*/
    private BluetoothLeScanner mLEScanner;
    private ScanSettings settings;
    private List<ScanFilter> filters;
    private BluetoothGatt mGatt;


    public BackgroundService() {

    }

    public BackgroundService(Context context) {
        this.context = context;
    }

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        int delay = 10000;
//        getting systems default ringtone
        handlerScan.postDelayed(new Runnable() {
            @Override
            public void run() {

                IntentFilter intentFilter = new IntentFilter();
                intentFilter.addAction(BluetoothLeService.ACTION_GATT_CONNECTED);
                intentFilter.addAction(BluetoothLeService.ACTION_GATT_DISCONNECTED);
                intentFilter.addAction(BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED);
                intentFilter.addAction(BluetoothLeService.ACTION_DATA_AVAILABLE);
                intentFilter.addAction(BluetoothLeService.ACTION_GATT_RSSI_UPDATE);
                intentFilter.addAction(BluetoothLeService.ACTION_GATT_WRITE_FAILED);

                Log.e(TAG,"OnResume()");

                getApplicationContext().registerReceiver(mGattUpdateReceiver, intentFilter);
                getApplicationContext().bindService(new Intent(getApplicationContext(), BluetoothLeService.class), mServiceConnection, 1);


                Toast.makeText(getApplicationContext(),"CALL YOUR METHOD",Toast.LENGTH_LONG).show();

                // Use this check to determine whether BLE is supported on the device.  Then you can
                // selectively disable BLE-related features.
                if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
                    Toast.makeText(context, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
                }
                // Initializes a Bluetooth adapter.  For API level 18 and above, get a reference to
                // BluetoothAdapter through BluetoothManager.
                final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
                mBluetoothAdapter = bluetoothManager.getAdapter();
                // Checks if Bluetooth is supported on the device.
                if (mBluetoothAdapter == null) {
                    Toast.makeText(context, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
                    return;
                }


                for (int i = 0; i < 256; i += REQUEST_ENABLE_BT) {
                    advDataTypes[i] = "Unknown Data Type";
                }
                advDataTypes[REQUEST_ENABLE_BT] = "Flags";
                advDataTypes[2] = "Incomplete List of 16-bit Service Class UUIDs";
                advDataTypes[3] = "Complete List of 16-bit Service Class UUIDs";
                advDataTypes[4] = "Incomplete List of 32-bit Service Class UUIDs";
                advDataTypes[5] = "Complete List of 32-bit Service Class UUIDs";
                advDataTypes[6] = "Incomplete List of 128-bit Service Class UUIDs";
                advDataTypes[7] = "Complete List of 128-bit Service Class UUIDs";
                advDataTypes[8] = "Shortened Local Name";
                advDataTypes[9] = "Complete Local Name";
                advDataTypes[10] = "Tx Power Level";
                advDataTypes[13] = "Class of LocalDevice";
                advDataTypes[14] = "Simple Pairing Hash";
                advDataTypes[15] = "Simple Pairing Randomizer R";
                advDataTypes[16] = "LocalDevice ID";
                advDataTypes[17] = "Security Manager Out of Band Flags";
                advDataTypes[18] = "Slave Connection Interval Range";
                advDataTypes[20] = "List of 16-bit Solicitaion UUIDs";
                advDataTypes[21] = "List of 128-bit Solicitaion UUIDs";
                advDataTypes[22] = "Service Data";
                advDataTypes[23] = "Public Target Address";
                advDataTypes[24] = "Random Target Address";
                advDataTypes[25] = "Appearance";
                advDataTypes[26] = "Advertising Interval";
                advDataTypes[61] = "3D Information Data";
                advDataTypes[255] = "Manufacturer Specific Data";
                scanPeriod = getApplicationContext().getSharedPreferences(PREFS_NAME, 0).getInt("scan_interval", 2000);
                scanLeDevice(true);



            }


//            unRegisterReceicerAndService();

        }, 1000);

        return START_STICKY;
    }

    @Override
    public void onCreate() {
        super.onCreate();
//    -------------------Connect Ble--------------------------------------


    }

    private void scanLeDevice(final boolean enable) {
        Log.e(TAG,"scanTrackerDevices");

        bluetoothDeviceArrayList.clear();
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);

                    int arraySize=bluetoothDeviceArrayListTwo.size();
                    Log.e(TAG,"bluetoothDeviceArrayListTwo Size in scan :"+arraySize);

                    for (int i=0;i<bluetoothDeviceArrayListTwo.size();i++){
                        BluetoothDevice bluetoothDevice=bluetoothDeviceArrayListTwo.get(i);
                        Log.e(TAG,"Device Name in scan :"+bluetoothDevice.getName());
                        Log.e(TAG,"Device Address in scan :"+bluetoothDevice.getAddress());

                        if (i==0){
                            mBluetoothLeService.connect(bluetoothDevice.getAddress());
                        }
                    }
                }
            }, scanPeriod);

            mScanning = true;
            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }

    }


    private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
        public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {

            String d = "";
            String rd = "";
            String h = "0123456789ABCDEF";
            int ln = 0;
            int i = 0;
            while (i < scanRecord.length) {

                int x = scanRecord[i] & 255;
                rd = new StringBuilder(String.valueOf(rd)).append(h.substring(x / 16, (x / 16) + REQUEST_ENABLE_BT)).append(h.substring(x % 16, (x % 16) +REQUEST_ENABLE_BT)).toString();
                if (i == ln) {
                    ln = (i + x) + REQUEST_ENABLE_BT;
                    if (x == 0) {
                        break;
                    }
                    d = new StringBuilder(String.valueOf(d)).append("\r\n     Length: ").append(h.substring(x / 16, (x / 16) + REQUEST_ENABLE_BT)).append(h.substring(x % 16, (x % 16) +REQUEST_ENABLE_BT)).toString();
                    i += REQUEST_ENABLE_BT;
                    x = scanRecord[i] & 255;
                    d = new StringBuilder(String.valueOf(d)).append(",   Type :").append(h.substring(x / 16, (x / 16) + REQUEST_ENABLE_BT)).append(h.substring(x % 16, (x % 16) + REQUEST_ENABLE_BT)).append(" = ").append(advDataTypes[x]).append(",   Value: ").toString();
                    rd = new StringBuilder(String.valueOf(rd)).append(h.substring(x / 16, (x / 16) + REQUEST_ENABLE_BT)).append(h.substring(x % 16, (x % 16) + REQUEST_ENABLE_BT)).toString();

                } else {
                    d = new StringBuilder(String.valueOf(d)).append(" ").append(h.substring(x / 16, (x / 16) + REQUEST_ENABLE_BT)).append(h.substring(x % 16, (x % 16) +REQUEST_ENABLE_BT)).toString();
                }
                i += REQUEST_ENABLE_BT;
            }

            Log.e(TAG,"UUID : "+device.getUuids());
            String[] arrayDeviceName=String.valueOf(device.getName()).split(" ");
            String deviceName0=arrayDeviceName[0];
//                    String deviceName1=arrayDeviceName[1];

            if (deviceName0.equals("EUROtronic")){
                Log.e(TAG,"Device Name :"+device.getName());
                bluetoothDeviceArrayListTwo.add(device);
//                        Log.e(TAG,"Device Address :"+deviceName0);
            }
        }
    };



    /*-------------------Connect BLE---------------------------------------------*/

    private Handler mHandler2=new Handler();;
    public final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent)
        {
            String action = intent.getAction();

            if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action))
            {
                numberOfRssi = 0;
                avgRssi = 0.0f;
                mConnected = true;
                mHandler2.postDelayed(startRssi, 300);
                Log.e(TAG,"ACTION_GATT_CONNECTED");

            }


            else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) {
                mConnected = false;
                Log.e(TAG,"ACTION_GATT_DISCONNECTED");
            } else if (BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
                displayGattServicesForDimmer(mBluetoothLeService.getSupportedGattServices());
                Log.e(TAG,"ACTION_GATT_SERVICES_DISCOVERED");

            } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
                Log.e(TAG,"ACTION_DATA_AVAILABLE");
                String unknownServiceString = context.getResources().getString(R.string.unknown_service);
                displayDimmer2(intent.getStringExtra(BluetoothLeService.EXTRA_DATA));

            } else if (BluetoothLeService.ACTION_GATT_RSSI_UPDATE.equals(action)) {

            } else if (BluetoothLeService.ACTION_GATT_WRITE_FAILED.equals(action)) {
                Log.e(TAG,"ACTION_GATT_WRITE_FAILED");
            }
        }
    };



    private BluetoothGattCharacteristic mNotifyCharacteristic;

    public static ServiceConnection mServiceConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName componentName, IBinder service) {
            mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
            if (!mBluetoothLeService.initialize()) {
                Log.e(TAG, "Unable to initialize Bluetooth");
//                getActivity().finish();

            }
//            mBluetoothLeService.connect(mDeviceAddress);
        }
        public void onServiceDisconnected(ComponentName componentName) {
            mBluetoothLeService = null;
        }
    };
    private boolean notificationActive = true;
    private int numberOfRssi = 0;

    private Runnable startRssi = new Runnable() {
        public void run() {
            if (mConnected) {
                mBluetoothLeService.readRemoteRssi();
                mHandler2.postDelayed(startRssi, 200);
            }
        }
    };

    public BluetoothGatt getmGatt() {
        return mGatt;
    }

    private void displayDimmer2(String data){

        if (data!=null){
            Log.e(TAG,"display Dimmer2"+data);
            String sosString = data.substring(0, Math.min(data.length(), 3));
            Log.e(TAG,"SOS String :"+sosString);
            if (sosString.equals("SOS")){
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:"+ SharedPreferencesUtils.getStringFromSharedPreferences(KEY_SP_MOBILE_NUMBER,getApplicationContext())));
                callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                getApplicationContext().startActivity(callIntent);
            }

        }
    }

    /*-------------------------disaplay gatt service for dimmer----------------------*/
    private void displayGattServicesForDimmer(List<BluetoothGattService> gattServices) {

        if (gattServices != null) {

            String unknownServiceString = getResources().getString(R.string.unknown_service);
            String unknownCharaString = getResources().getString(R.string.unknown_characteristic);
            ArrayList<HashMap<String, String>> gattServiceData = new ArrayList();
            ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData = new ArrayList();
            this.mGattCharacteristics = new ArrayList();


            for (BluetoothGattService gattService : gattServices) {
                HashMap<String, String> currentServiceData = new HashMap();
                String uuid = gattService.getUuid().toString();
                currentServiceData.put("NAME", SampleGattAttributes.lookup(uuid, unknownServiceString));
                currentServiceData.put("UUID", uuid);
                gattServiceData.add(currentServiceData);
                ArrayList<HashMap<String, String>> gattCharacteristicGroupData = new ArrayList();
                List<BluetoothGattCharacteristic> gattCharacteristics = gattService.getCharacteristics();
                ArrayList<BluetoothGattCharacteristic> charas = new ArrayList();


                for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {
                    charas.add(gattCharacteristic);
                    HashMap<String, String> currentCharaData = new HashMap();
                    uuid = gattCharacteristic.getUuid().toString();
                    currentCharaData.put("NAME", "\t\t\t<<" + SampleGattAttributes.lookup(uuid, unknownCharaString) + ">>");
                    currentCharaData.put("UUID", "\t\t\tUUID: 0x" + uuid.substring(4, 8) + ", Properties: " + translateProperties(gattCharacteristic.getProperties()));
                    gattCharacteristicGroupData.add(currentCharaData);

                    Log.i(TAG,"CUrrent CHARACTERISTIC DATA"+currentCharaData);
                    Log.i(TAG,"UUID : "+uuid.substring(4, 8));
                    Log.i(TAG,"Proprties : "+gattCharacteristic.getProperties());
                    Log.i(TAG,"Translate Proprties : "+translateProperties(gattCharacteristic.getProperties()));
                    Log.i(TAG,"char list"+gattCharacteristicData.toString());

                }
                gattService4=gattService;
                this.mGattCharacteristics.add(charas);
            }

            if (mGattCharacteristics.get(3)!=null) {
                lastCharacteristic = new ArrayList<>(mGattCharacteristics.get(3));
                enableNotifyOfCharcteristicForDimmer(lastCharacteristic);
            }
        }
    }

    private String translateProperties(int properties) {
        String s = "";
        if ((properties & 1) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/Broadcast").toString();
        }
        if ((properties & 2) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/Read").toString();
        }
        if ((properties & 4) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/WriteWithoutResponse").toString();
        }
        if ((properties & 8) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/Write").toString();
        }
        if ((properties & 16) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/Notify").toString();
        }
        if ((properties & 32) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/Indicate").toString();
        }
        if ((properties & 64) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/SignedWrite").toString();
        }
        if ((properties & 128) > 0) {
            s = new StringBuilder(String.valueOf(s)).append("/ExtendedProperties").toString();
        }
        if (s.length() > 1) {
            return s.substring(1);
        }
        return s;
    }

    //    Enable Characteristic for dimmer
    public void enableNotifyOfCharcteristicForDimmer(ArrayList<BluetoothGattCharacteristic> lastCharacteristic){

        if(mGattCharacteristics!=null) {

            checkCharacteristicPresent(lastCharacteristic.get(0));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(0), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+0+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 0 +" :" +lastCharacteristic.get(0).toString());

            checkCharacteristicPresent(lastCharacteristic.get(1));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(1), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+1+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 1 +" :" +lastCharacteristic.get(1).toString());

            checkCharacteristicPresent(lastCharacteristic.get(2));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(2), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+2+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 2 +" :" +lastCharacteristic.get(2).toString());

            checkCharacteristicPresent(lastCharacteristic.get(3));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(3), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+3+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 3 +" :" +lastCharacteristic.get(3).toString());

            checkCharacteristicPresent(lastCharacteristic.get(4));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(4), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+4+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 4 +" :" +lastCharacteristic.get(4).toString());

            checkCharacteristicPresent(lastCharacteristic.get(5));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(5), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+5+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 5 +" :" +lastCharacteristic.get(5).toString());

            checkCharacteristicPresent(lastCharacteristic.get(2));
            mBluetoothLeService.setCharacteristicNotification(lastCharacteristic.get(2), true);
            notificationActive = true;
            Log.e(TAG,"Characteristic index : "+2+":\nM GATT CHARACTERISTIC AT "+"Service 4 : CHAR"+ 2 +" :" +lastCharacteristic.get(2).toString());

        }
    }

    //  Check the type of characteristic i.e READ/WRITE/NOTIFY
    public void checkCharacteristicPresent(BluetoothGattCharacteristic characteristic) {

        int charaProp = characteristic.getProperties();
        Log.e(TAG, "checkCharacteristicPresent Prop : " + charaProp);
        mBluetoothLeService.setCurrentCharacteristic(characteristic);

        if ((charaProp & 2) > 0) {
            Log.e(TAG, "CharProp & 2 : " + charaProp);
            mBluetoothLeService.readCharacteristic(characteristic);
        }
        if ((charaProp & 16) > 0) {
            Log.e(TAG, "CharProp & 16 : " + charaProp);
            mNotifyCharacteristic = characteristic;
        } else {
            if (mNotifyCharacteristic != null) {
                mBluetoothLeService.setCharacteristicNotification(mNotifyCharacteristic, false);
                mNotifyCharacteristic = null;
            }
        }

        if ((charaProp & 8) > 0 || (charaProp & 4) > 0) {
            Log.e(TAG, "CharProp & 4 : " + charaProp);
        } else {
            Log.e(TAG, "Else : " + charaProp);

        }
    }


    public void disconnectBLEDevice(){
//        if (mNotifyCharacteristic != null) {
        mBluetoothLeService.disconnect();
//        }
    }

    @Override
    public void onDestroy(){
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
        super.onDestroy();
    }

}
  public void destroyService() {
    stopSelf();
}
private void stopService() {
  Intent intent = new Intent(this, Background.class);
  intent.putExtra("close", true);
  startService(intent);
}

  @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.hasExtra("close") && intent.getBooleanExtra("close",false)) {
        stopSelf();
    } else {
       // Do your work here
    }
    return START_STICKY;
}