2013-04-30 2 views

답변

3

BluetoothPan (Personal Area Networking)이 테 더링 키워드입니다. 나는 API 문서와 안드로이드 소스 코드를 훑어 보았지만, 주석의 간단한 예는 오도 된 것이다. 이 포스터는 예를 제공하지만 난 처음에 그것으로 문제가 있었다 : 나는 BT 장치의 IP 주소를 확인하는 등 다양한 다른 방법을 시도
Android BluetoothPAN to create TCP/IP network between Android device and Windows7 PC

. 그러나 블루투스 네트워크 장치가 없으므로 확인할 IP가 없습니다. Detect USB tethering on android


위로 BluetoothPan 코드 ... 첫 번째 스레드의 예제 (더 ServiceListener 구현) 불완전 없었다. 나는 하나의 표준을 시도했지만 isTetheringOn 프록시 호출에 실패했습니다. 가장 중요한 부분은 onServiceConnected() 콜백은 코드 한 줄 이상을 필요로하거나 컴파일러가이를 최적화한다는 것입니다. 또한 다른 대부분의 예제처럼 프록시를 연결 해제하면 안됩니다. 여기에 작업 코드가 있습니다 :

BluetoothAdapter mBluetoothAdapter = null; 
Class<?> classBluetoothPan = null; 
Constructor<?> BTPanCtor = null; 
Object BTSrvInstance = null; 
Class<?> noparams[] = {}; 
Method mIsBTTetheringOn; 

@Override 
public void onCreate() { 
    Context MyContext = getApplicationContext(); 
    mBluetoothAdapter = getBTAdapter(); 
    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)); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

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(); 
    } 
} 

// Check whether Bluetooth tethering is enabled. 
private boolean IsBluetoothTetherEnabled() { 
    try { 
     if(mBluetoothAdapter != null) { 
      return (Boolean) mIsBTTetheringOn.invoke(BTSrvInstance, (Object []) noparams); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

public class BTPanServiceListener implements BluetoothProfile.ServiceListener { 
    private final Context context; 

    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"); 
    } 

    @Override 
    public void onServiceDisconnected(final int profile) { 
    } 
} 
+1

isTetheringOn을 호출하는 동안 동일한 코드를 사용하지만 호출 대상 예외를 시도했습니다. bluetooth 및 bt admin 권한을 모두 등록했습니다. –

+1

나를 위해 일하지 않습니다 ... 예외는 아니지만 값은 false로 유지됩니다. – Tobliug

+0

Not working :-(예외는 아니지만 값은 false로 유지됩니다. – Gattsu