mkai
unread,Oct 15, 2010, 5:26:54 AM10/15/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to 日本Androidの会
お世話になります、mkaiです。
かなり詰まってしまっているので、どなたかご教授ください。
現在、音楽の鳴らす先(スピーカー?)を自由に設定する、という処理を作ろうとしています。
1.耳にあてて聴く
2.機体を机などに置いて聴く
3.Bluetoothのスピーカーを使って聴く
以上の動作を使い分けたいのですが、
「Bluetoothが使える(設定がONになっていて、デバイスが既にペアリングされている)状態で、
音楽を耳に当てて聴く」処理がうまくいきません。
以下の方法を試してみても、うまくいきませんでした。
・BluetoothAdapterクラスのdisable()を使い、BluetoothをOFFにしようとする
→実機がリブートしてしまう
・BluetoothをOFFにするのを諦め、AudioManagerクラスのsetMode()などを使う
→音が出ない
BluetoothがOFFの状態であれば、1は簡単にできるのですが・・・。
以下、簡単ですがコードです。
使っている実機:HTC Desire X06HT
Androidバージョン:2.2
-----------------------------------------------------------------------------------------------------------------
private BluetoothAdapter bluetooth_adapt =
BluetoothAdapter.getDefaultAdapter();
private static AudioManager audio= (AudioManager)
getSystemService(Context.AUDIO_SERVICE);
private MediaPlayer bgmPlayer = MediaPlayer.create(this,
R.raw.stage1bgm);
・Bluetoothをオン/オフする
if (bluetooth_adapt.isEnabled()) {
audio.setBluetoothScoOn(false);
audio.stopBluetoothSco();
audio.setMode(AudioManager.MODE_NORMAL);
bluetooth_adapt.disable();
// ここで落ちます。sleepを入れたりしていますが効果はありませんでした…。
}else{
bluetooth_adapt.enable();
Intent enable_bt = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enable_bt, REQUEST_ENABLE_BT);
}
・耳に当てて聴く
audio.setBluetoothScoOn(false);
audio.stopBluetoothSco();
audio.setSpeakerphoneOn(false);
// 上の3行をコメントアウトすると、音が出るには出るのですが、
Bluetooth端末からになります。
audio.setMode(AudioManager.MODE_IN_CALL);
bgmPlayer.start();
・Bluetoothで聴く
audio.startBluetoothSco();
audio.setMode(AudioManager.MODE_IN_CALL);
bgmPlayer.start();
-----------------------------------------------------------------------------------------------------------------
以下は、リブートしたときのログの抜粋です。
DEBUG/BluetoothService(4965): Bluetooth state 12 -> 13
DEBUG/BluetoothHandsfree(5072): audioOff(): mPendingSco: false,
mScoSocket: , mA2dpState: 2, mA2dpSuspended: false
INFO/BluetoothA2dpService(4965): checkSinkSuspendState() : state = 0
prevState = 2
INFO/BluetoothA2dpService(4965): checkSinkSuspendState() :
mTargetA2dpState = -1
INFO/BluetoothA2dpService(4965): checkSinkSuspendState() :
initialStart = false initialSuspend = false
DEBUG/A2dpAudioInterface(4957): setBluetoothEnabled 0
INFO/BluetoothA2dpService(4965): A2DP profile has been disconnected
VERBOSE/BluetoothDataGatewayService(4965): #### DataGateway Service
Received message ####
INFO/BrcmBtServiceLoader(4965): ***Received Bluetooth
UNKNOWN_STATE_CHANGE Event**** : 13
INFO/BluetoothService(4965): Got ACTION_PROFILE_DISCONNECTED, profile
= 2
VERBOSE/BluetoothEventRedirector(5223): Received
android.bluetooth.adapter.action.STATE_CHANGED
INFO/BluetoothEventRedirector(5223): EXTRA_STATE = 13
VERBOSE/BluetoothEventRedirector(5223): Received
android.bluetooth.a2dp.action.SINK_STATE_CHANGED
INFO/BluetoothService(4965): Got ACTION_PROFILE_DISCONNECTED, profile
= 3
INFO/AudioHardwareQSD(4957): Routing audio to Handset
DEBUG/AudioHardwareQSD(4957): Switching audio device to
DEBUG/AudioHardwareQSD(4957): Handset
ERROR/AndroidRuntime(4965): *** FATAL EXCEPTION IN SYSTEM PROCESS:
android.server.ServerThread
ERROR/AndroidRuntime(4965): java.lang.RuntimeException: Error
receiving broadcast Intent
{ act=android.bluetooth.headset.action.STATE_CHANGED (has extras) } in
android.media.AudioService$AudioServiceBroadcastReceiver@46395630
ERROR/AndroidRuntime(4965): at android.app.ActivityThread
$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:938)
ERROR/AndroidRuntime(4965): at
android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(4965): at
android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(4965): at android.os.Looper.loop(Looper.java:
144)
ERROR/AndroidRuntime(4965): at
com.android.server.ServerThread.run(SystemServer.java:600)
ERROR/AndroidRuntime(4965): Caused by:
java.util.NoSuchElementException: Death link does not exist
ERROR/AndroidRuntime(4965): at
android.os.BinderProxy.unlinkToDeath(Native Method)
ERROR/AndroidRuntime(4965): at android.media.AudioService
$ScoClient.clearCount(AudioService.java:1080)
ERROR/AndroidRuntime(4965): at
android.media.AudioService.clearAllScoClients(AudioService.java:1138)
ERROR/AndroidRuntime(4965): at android.media.AudioService
$AudioServiceBroadcastReceiver.onReceive(AudioService.java:1928)
ERROR/AndroidRuntime(4965): at android.app.ActivityThread
$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:920)
ERROR/AndroidRuntime(4965): ... 4 more
-----------------------------------------------------------------------------------------------------------------
長くなってしまいましたが、以上です。
恐れいりますが、ご存知の方がいらっしゃいましたら、ご教示頂きたく存じます。
よろしくお願い致します。