How Android Bluetooth Profiles are enabled & Services activated ?

How Android Bluetooth profiles are enabled ?


Check packages/apps/Bluetooth/res/values/config.xml

<resources>16 <bool name="profile_supported_a2dp">true</bool>
If you want to disable the above profile, change from "true" to "false"Check related lxrThe above flags are used during initialisation as below, in file, packages/apps/Bluetooth/src/com/android/bluetooth/btservice/
Resource flag to indicate whether profile is supported or not.
private static final int[] PROFILE_SERVICES_FLAG = { R.bool.profile_supported_hs_hfp, R.bool.profile_supported_a2dp, R.bool.profile_supported_a2dp_sink, R.bool.profile_supported_hid, R.bool.profile_supported_hdp, R.bool.profile_supported_pan, R.bool.profile_supported_gatt, R.bool.profile_supported_map, R.bool.profile_supported_hfpclient, R.bool.profile_supported_avrcp_controller, };
Supported Profile services are defined at,
 private static final Class[] PROFILE_SERVICES = { HeadsetService.class, A2dpService.class, A2dpSinkService.class, HidService.class, HealthService.class, PanService.class, GattService.class, BluetoothMapService.class, HeadsetClientService.class, AvrcpControllerService.class, };
Now inside init, it checks resources (from packages/apps/Bluetooth/res/values/config.xml ) flag and adds a profile if its supported as below,
 boolean supported = resources.getBoolean(PROFILE_SERVICES_FLAG[i]); if (supported) { Log.d(TAG, "Adding " + PROFILE_SERVICES[i].getSimpleName()); profiles.add(PROFILE_SERVICES[i]); }
Refer to Link for more details.How Profile Services are started ?As mentioned above, the declaration of profile services, is done, now the profile service actually gets started frompackages/apps/Bluetooth/src/com/android/bluetooth/btservice/
void processStart() {
Class[] supportedProfileServices = Config.getSupportedProfiles(); [ This is called to Link ]
mJniCallbacks.init(mBondStateMachine,mRemoteDevices); [ This calls the JNI calls for the particular profile service ] //Start profile services if (!mProfilesStarted && supportedProfileServices.length >) { //Startup all profile services setProfileServiceState(supportedProfileServices,BluetoothAdapter.STATE_ON); }else { debugLog("processStart() - Profile Services alreay started"); mAdapterStateMachine.sendMessage(mAdapterStateMachine.obtainMessage(AdapterState.STARTED)); } The above functions calls to starts the profile services, Call to setProfileServiceState goes to
file packages/apps/Bluetooth/src/com/android/bluetooth/btservice/
private void setProfileServiceState(Class[] services, int state) {
 for (int i=; i <services.length;i++) { String serviceName = services[i].getName(); Integer serviceState = mProfileServicesState.get(serviceName); if(serviceState != null && serviceState != expectedCurrentState) { debugLog("setProfileServiceState() - Unable to " + (state == BluetoothAdapter.STATE_OFF ? "start" : "stop" ) + " service " + serviceName + ". Invalid state: " + serviceState); continue; } debugLog("setProfileServiceState() - " + (state == BluetoothAdapter.STATE_OFF ? "Stopping" : "Starting") + " service " + serviceName); mProfileServicesState.put(serviceName,pendingState); Intent intent = new Intent(this,services[i]); intent.putExtra(EXTRA_ACTION,ACTION_SERVICE_STATE_CHANGED); intent.putExtra(BluetoothAdapter.EXTRA_STATE,state); startService(intent); }
READ  How to fix : ERROR: do_package_qa: QA Issue: No GNU_HASH in the elf binary

Leave a Reply

Your email address will not be published. Required fields are marked *