Hello Friends ,
Today, I am sharing my another blog on Bluetooth Tethering. In this tutorial
we can programmatically turn on and off Bluetooth Tethering.

Here the code:
1. BluetoothTethering.java
2. BTPanServiceListener.java
Today, I am sharing my another blog on Bluetooth Tethering. In this tutorial
we can programmatically turn on and off Bluetooth Tethering.

Here the code:
1. BluetoothTethering.java
- package com.solutions.developer.android.com.bluetoothtethering;
- import android.annotation.SuppressLint;
- import android.bluetooth.BluetoothAdapter;
- import android.bluetooth.BluetoothManager;
- import android.bluetooth.BluetoothProfile;
- import android.content.Context;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.widget.CompoundButton;
- import android.widget.Switch;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- public class BluetoothTethering extends AppCompatActivity {
- BluetoothAdapter mBluetoothAdapter = null;
- Class classBluetoothPan = null;
- Constructor BTPanCtor = null;
- Object BTSrvInstance = null;
- Class noparams[] = {};
- Method mIsBTTetheringOn;
- public static Switch toggle ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_bluetooth_tethering);
- toggle = (Switch) findViewById(R.id.wifi_switch);
- toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- try {
- mBluetoothAdapter = getBTAdapter();
- mBluetoothAdapter.enable();
- Thread.sleep(100);
- toggleTethering();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_bluetooth_tethering, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- public void toggleTethering() {
- Context MyContext = getApplicationContext();
- mBluetoothAdapter = getBTAdapter();
- String sClassName = "android.bluetooth.BluetoothPan";
- try {
- classBluetoothPan = Class.forName("android.bluetooth.BluetoothPan");
- mIsBTTetheringOn = classBluetoothPan.getDeclaredMethod("isTetheringOn", noparams);
- BTPanCtor = classBluetoothPan.getDeclaredConstructor(Context.class, BluetoothProfile.ServiceListener.class);
- BTPanCtor.setAccessible(true);
- BTSrvInstance = BTPanCtor.newInstance(MyContext, new BTPanServiceListener(MyContext));
- Thread.sleep(250);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @SuppressLint("NewApi")
- private BluetoothAdapter getBTAdapter() {
- if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1)
- return BluetoothAdapter.getDefaultAdapter();
- else {
- BluetoothManager bm = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
- return bm.getAdapter();
- }
- }
- public static void changeToggleState(boolean state) {
- try{
- if(state){
- toggle.setChecked(BTPanServiceListener.state);
- }else {
- toggle.setChecked(BTPanServiceListener.state);
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }
2. BTPanServiceListener.java
- package com.solutions.developer.android.com.bluetoothtethering;
- import java.lang.reflect.InvocationTargetException;
- import android.bluetooth.BluetoothProfile;
- import android.content.Context;
- import android.util.Log;
- import android.widget.Toast;
- public class BTPanServiceListener implements BluetoothProfile.ServiceListener {
- private final Context context;
- public static boolean state = false;
- public BTPanServiceListener(final Context context) {
- this.context = context;
- }
- @Override
- public void onServiceConnected(final int profile,
- final BluetoothProfile proxy) {
- //Some code must be here or the compiler will optimize away this callback.
- Log.i("MyApp", "BTPan proxy connected");
- try {
- boolean nowVal = ((Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0])).booleanValue();
- if (nowVal) {
- proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, new Object[]{Boolean.valueOf(false)});
- Toast.makeText(context, "Turning bluetooth tethering off", Toast.LENGTH_SHORT).show();
- state = false;
- } else {
- proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, new Object[]{Boolean.valueOf(true)});
- Toast.makeText(context, "Turning bluetooth tethering on", Toast.LENGTH_SHORT).show();
- state = true;
- }
- BluetoothTethering.changeToggleState(state);
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- public void onServiceDisconnected(final int profile) {
- }
- }
Download Complete Code : BluetoothTethering
Hope this will help some one.
Enjoy coding....... :)
0 comments:
Post a Comment