2011-08-17 2 views
2

Android 2.2 API 레벨 8에 대해 프로그래밍 중이며 처음에 응용 프로그램을 시작할 때 현재 블루투스 헤드셋이 연결되어 있는지 확인하려고합니다. 이 문제에 대한 해결책을 찾을 수없는 것 같습니다.Android 2.2는 응용 프로그램 시작시 내 Bluetooth 헤드셋이 연결되어 있는지 여부를 알려줍니다.

내 응용 프로그램이 실행되면 BluetoothDevice.ACTION_ACL_CONNECTED 및 BluetoothDevice.ACTION_ACL_DISCONNECTED를 청취 할 수 있습니다. here은 좋은 생각을 가지고 있습니다. 하지만 현재 블루투스 헤드셋이 연결되어있는 경우 BroadcastReceiver가 켜지 기 전에 알려주는 방법을 알 수 없습니다.

또한 다음을 통해 장치에 페어링 된 장치가 있는지 확인하는 방법을 알아 냈습니다.

BluetoothAdapter mBluetoothAdapter = null; 
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
if(mBluetoothAdapter != null) 
{ 
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
    if (pairedDevices.size() != 0) 
    { 
     // the device has paired devices 
     for (BluetoothDevice device : pairedDevices) 
     { 
      Log.i(TAG, "device name: " + device.getName()); 
      Log.i(TAG, "device address: " + device.getAddress()); 
     } 
    } 
    else 
    { 
     // no paired devices 
     Log.i(TAG, "no paired devices"); 
    } 
} 

나는 거기에 누군가가 이미 API (11)에 같은 BluetoothProfileBluetoothHeadset 아마이 작업을 수행 할 수있는 몇 가지 새로운 클래스가 있다는 것을 나는 깨닫는다 API 레벨 8에 대한이 문제에 대한 솔루션을 바라고 1 줄의 코드에서,하지만 다시 API 레벨 8에서이 작업을 수행하려고합니다.

나는이 시점에서 무엇이든 해보려고합니다. 사전

-H

+0

아직 출생하지 않았습니다. 정말이 문제에 대한 해결책을 원합니다. 저는 지난 한 달 동안 많은 것을 배웠고 신청서와 함께 많은 것을 보았습니다. 모두 덕분에 stackoverflow – Havoc

답변

1

에서

덕분에 불행하게도 정말 루팅 해제 장치에 자바에서이 작업을 수행 할 수있는 방법이 없습니다. 루트 액세스 권한이있는 장치가 있고 NDK를 사용하는 경우 BlueZ 프로그래밍 계층에 넣을 수 있지만 거기에서 할 수는 있지만 공개적으로 사용 가능한 Java API를 사용하면이를 수행 할 방법이 없습니다.

+0

대답을 듣고 싶지 않아요 :( – Havoc

+0

내가 반사를 통해 할 수있는 일이 있습니까? 그 [BluetoothHeadset] (http://www.androidjavadoc.com/1.1_r1_src/android/bluetooth/BluetoothHeadset .html)이 존재하고 [reflection] (http://java.sun.com/developer/technicalArticles/ALT/Reflection/) 또는 [this] (http://stackoverflow.com/questions/6020421/problem)을 시도 할 수 있습니다. -invoking-a-private-unpublished-method-in-android-api) – Havoc

+0

음, http://android.git.kernel.org/?p=platform/frameworks/base.git에서 BluetoothService 클래스를 파헤 칠 수 있습니다. a = blob; f = core/java/android/server/BluetoothService.java; h = 643581e40695ee82a0392745fb3b260361698f23; hb = HEAD 및 API 레벨 8에서 도달 할 수있는 패키지 가용성에 국한되지 않는 것이 있는지 나는 그것을 어떻게 든 의심한다. 나는 탐지해야 할 장치가있는 의료 기기 작업을해야했고, 불행하게도 cl은 없다. 네이티브로 이동하지 않고 특정 클래스의 장치가 있는지 검색합니다 (포기 :()). – Femi

4

다음 코드는 저에게 적합합니다. 먼저 BT 장치를 안드로이드와 수동으로 연결하십시오.

AudioManager am = getSystemService(Context.AUDIO_SERVICE) 
if(am.isBluetoothA2dpOn()) 
{ 
    //bt device is connected with phone 
} 
else{ 
    // no device is connected with phone 
} 
+0

나를 위해 작동하지 않습니다. – fustalol

+0

@fustalol Android 5.1 (CyanogenMod 12.1)에서 저를 위해 일했습니다. 그러나 블루투스 스피커/헤드셋에서만 작동합니다. (그리고 장치 이름 등은 알려주지 않습니다) – Venryx

관련 문제