http://developer.android.com/reference/android/media/AudioManager.html
일단 API주소입니다.
블루투스 SCO 오디오 연결상태가 변하면 Sticky 브로드캐스트 인텐트 액션..
그러니까 ACTION_SCO_AUDIO_STATE_CHANGED 이 액션명을 날리는 걸로 되어 있어서
브로드캐스트 리시버를 만들어 register하고(매니페스트 아님) 액션명이 같으면 간단하게 토스트를 띄우는 것만 하는데
이게 잘 안되네요
Sticky브로드캐스트니까 register했을때 마지막에 받은 액션을 받아 바로 토스트가 뜰거라 생각했는데 아무것도 안 나오네요 ㅠ
BluetoothReceiver는 sipdroid의 코드를 테스트하기 위해 간단하게 수정한건데요
public class BluetoothUtils8 {
private static final String THIS_FILE = "BT8";
private BroadcastReceiver mediaStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED.equalsIgnoreCase(action)) {
Toast.makeText(context, action, Toast.LENGTH_LONG).show();
}
}
};
private Context context;
public BluetoothUtils8(Context aContext) {
context = aContext;
context.registerReceiver(mediaStateReceiver, new IntentFilter(
AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED));
System.out.println("BlutoothUtils8 Register");
}
public void destroy() {
try {
context.unregisterReceiver(mediaStateReceiver);
System.out.println("BlutoothUtils8 Destroy");
} catch (Exception e) {
Log.w(THIS_FILE, "Failed to unregister media state receiver", e);
}
}
}
일단 블루투스 이어폰을 먼저 연결해놓고 Activity가 create될때
bt8 = new BluetoothUtils8(TestActivity.this); 로 register합니다.
그리고 Activityr가 Destroy될때 bt8.destroy()로 unregister하구요
왜 안되는건지 잘 모르겠네요 ㅠ
어느 부분을 잘못생각한건지 조언 부탁드리겠습니다 !
브로드캐스트리시버는 매니페스트에 정적으로 정의하는 방법도 있지만 그렇게 할 경우 앱이 종료되더 리시버가 활성화되기 때문에 저는 동적으로 리시버를 정의했습니다. registerReceiver 부분이요.
AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED는 sticky 인텐트이기 때문에 메모리에 남아있다가 관련된 리시버가 등록되면 해당 리시버로 전달이 됩니다.
문제인 부분은 onReceive가 제대로 호출이 되지 않는 다는 것인데 제가 AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED를 잘못이해하고 있는건지 아니면 리시버 등록을 제대로 못한건지.. 어느 부분이 잘못된 건지 잘 모르겠어서요
전에 비슷하게 해서 된 걸 확인했었는데 수정하다 보니 그 부분이 삭제가 되어있더라구요 ㅠ




Toast 를 구성하는 거 자체에는 문제 없어 보이는데요...
Intent 가 실제로 전달되는지, 즉 onReceive 가 제대로 호출되는지 확인하셔야 할 거 같은데요.
혹시, manifest.xml 파일에 receiver 를 정의안하신거 아닌지요?^^;;;