AudioService
frameworks/base/media/java/android/media/AudioService.java public void adjustStreamVolume(int streamType, int direction, int flags){ sendVolumeUpdate(streamType, oldIndex, index); } private void setVolumeUpdate(int streamType, int oldIndex, int index){ Intent intent = new Intent(AudioManager.VOLUME_CHANGED_ACTION); intent.putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, streamType); intent.putExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, index); intent.putExtra(AudioManager.EXTRA_PREV_VOLUME_STREAM_VALUE, oldIndex); mContext.sendBroadcast(intent); }
构造函数
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); intentFilter.addAction(BluetoothA2dp.ACTION_SINK_STATE_CHANGED); intentFilter.addAction(BluetoothHeadset.ACTION_STATE_CHANGED); intentFilter.addAction(Intent.ACTION_DOCK_EVENT); intentFilter.addAction(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED); intentFilter.addAction(Intent.ACTION_FM); context.registerReceiver(mReceiver, intentFilter);
private final BroadcastReceiver mReceiver = new AudioServiceBroadcastReceiver();
private class AudioServiceBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); } }
3rdparty/bluetooth/BRCM4330_BT/special/android/packages/apps/FMPlayer/src/com/thunderst/radio/FMPlay.java
public boolean onCheckedChanged(View view, boolean checked){
switch(view.getId()){
case R.id.headset_toggle:
Message msg = mHandler.obtainMessage(MSG_ROUTE);
mHandler.sendMessage(msg);
}
}
private Handle mHandler = new Handler(){
public void handleMessage case MSG_ROUTE: mService.routeAudio(...);
}
FM 切换到耳机 routeAudio(0); 切换到外放 routeAudio(1);
Intent intent = new Intent(Intent.ACTION_FM);
intent.putExtra("state", 1);
intent.putExtra("speaker", mAudioDevice);
sendBroadcast(intent);