package com.blakequ.bluetooth_manager_lib.util; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.util.Log; /** * the utils of bluetooth * * <li> * <li>1.check phone is supports BLE features{@link #isBluetoothLeSupported(Context)} * <li>2.the bluetooth is open or enable{@link #isBluetoothIsEnable()} * <li>3.if the bluetooth is closed you can using this method open system setting to open bluetooth{@link #askUserToEnableBluetoothIfNeeded(Activity)}??{@link #openBlueToothSetting(Activity)} */ public final class BluetoothUtils { private static String TAG = "BluetoothUtils"; public final static int REQUEST_ENABLE_BT = 2001; private BluetoothAdapter mBluetoothAdapter = null; private BluetoothManager mBluetoothManager = null; private static BluetoothUtils mBluetoothUtils; private Context mContext; public static synchronized BluetoothUtils getInstance(Context mContext){ if (mBluetoothUtils == null){ mBluetoothUtils = new BluetoothUtils(mContext); } return mBluetoothUtils; } private BluetoothUtils(Context mContext) { this.mContext = mContext; } /** * get adapter * @return */ public BluetoothAdapter getBluetoothAdapter() { if (mBluetoothAdapter == null) { // Initializes Bluetooth adapter. if (mBluetoothManager == null){ mBluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE); } mBluetoothAdapter = mBluetoothManager.getAdapter(); if (mBluetoothAdapter == null) { Log.e(TAG, "Failed to construct a BluetoothAdapter"); } } return mBluetoothAdapter; } /** * bluetooth is enable */ public boolean isBluetoothIsEnable(){ if (getBluetoothAdapter() == null || !isBluetoothLeSupported(mContext)) { return false; } return getBluetoothAdapter().isEnabled(); } /** * open system setting to open bluetooth * <p>Notification of the result of this activity is posted using the * {@link android.app.Activity#onActivityResult} callback. The * <code>resultCode</code> * will be {@link android.app.Activity#RESULT_OK} if Bluetooth has been * turned on or {@link android.app.Activity#RESULT_CANCELED} if the user * has rejected the request or an error has occurred. */ public void askUserToEnableBluetoothIfNeeded(Activity activity) { if (isBluetoothLeSupported(activity) && (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled())) { final Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); activity.startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } } /** * you phone is support bluetooth feature * @return */ public static boolean isBluetoothLeSupported(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE); } /** * open system setting to open bluetooth * <p>Notification of the result of this activity is posted using the * {@link android.app.Activity#onActivityResult} callback. The * <code>resultCode</code> * will be {@link android.app.Activity#RESULT_OK} if Bluetooth has been * turned on or {@link android.app.Activity#RESULT_CANCELED} if the user * has rejected the request or an error has occurred. * @param mActivity */ public static void openBlueToothSetting(Activity mActivity){ final Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); mActivity.startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } public static boolean isCharacteristicRead(int property){ if ((property & BluetoothGattCharacteristic.PROPERTY_READ) > 0) { return true; } return false; } public static boolean isCharacteristicWrite(int property){ if ((property & BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) > 0 || (property & BluetoothGattCharacteristic.PROPERTY_WRITE) > 0) { return true; } return false; } public static boolean isCharacteristicNotify(int property){ if ((property & BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0 || (property & BluetoothGattCharacteristic.PROPERTY_INDICATE) > 0) { return true; } return false; } public static boolean isCharacteristicBroadcast(int property){ if ((property & BluetoothGattCharacteristic.PROPERTY_BROADCAST) > 0){ return true; } return false; } }