免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1904 | 回复: 2
打印 上一主题 下一主题

android 耳机系统笔记1 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览
1.systemserver.java
2.android_server_SystemServer_init1.cpp 
3.System_init.cpp 
4.systemserver.java
新建线程
class ServerThread extends Thread 
…… 
public void run() 
…… 
try { 
Log.i(TAG, "Headset Observer"); 
// Listen for wired headset changes 
headset = new HeadsetObserver(context); // new a thread to observer headset status 
} catch (Throwable e) { 
Log.e(TAG, "Failure starting HeadsetObserver", e); 

5.启动服务并广播:HeadsetObserver.java 
class HeadsetObserver extends UeventObserver 
…… 
public HeadsetObserver(Context context) 
…… 
startObserving(HEADSET_UEVENT_MATCH); 
init(); // set initial status 

6.AudioService.java中将接收广播
private class AudioServiceBroadcastReceiver extends BroadcastReceiver 
public void onReceive(Context context, Intent intent) 
…… 
else if (action.equals(Intent.ACTION_HEADSET_PLUG)) 
…… 
//if you first insert headset, will implement fellow code 
AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET,AudioSystem.DEVICE_STATE_AVAILABLE,""); 

7.设置设备连接1:状态android_media_AudioSystem.cpp
static JNINativeMethod gMethods[] = { 
"setDeviceConnectionState","(IILjava/lang/String;)I",(void*)android_media_AudioSystem_setDeviceConnectionState}, 
}; 

8.设置连接状态2:AudioSystem.cpp
status_t AudioSystem::setDeviceConnectionState(audio_devices device, 
device_connection_state state, const char *device_address) 
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); 
if (aps == 0) return PERMISSION_DENIED; 
return aps->setDeviceConnectionState(device, state, device_address); 
9.设置连接状态3:AudioPolicyManager.cpp
status_t
AudioPolicyManager::setDeviceConnectionState(AudioSystem::audio_devices device, 
AudioSystem::device_connection_state state, const char *device_address) 
…… 
// handle output devices 
if (AudioSystem::isOutputDevice(device)) 
switch (state) 
case AudioSystem::DEVICE_STATE_AVAILABLE: 
…… 
if (AudioSystem::isBluetoothScoDevice(device)) 
…… 
else if (device == AudioSystem::DEVICE_OUT_WIRED_HEADSET || 
device == AudioSystem::DEVICE_OUT_WIRED_HEADPHONE) 
if (getDeviceForStrategy(STRATEGY_PHONE) == device && 
(mPhoneState == AudioSystem::MODE_IN_CALL || 
mOutputs.valueFor(mHardwareOutput)->isUsedByStrategy(STRATEGY_PHONE))) 
newDevice = device; 
else if ((getDeviceForStrategy(STRATEGY_SONIFICATION) & device) && 
mOutputs.valueFor(mHardwareOutput)->isUsedByStrategy(STRATEGY_SONIFICATION)) 
newDevice = getDeviceForStrategy(STRATEGY_SONIFICATION); 
else if ((getDeviceForStrategy(STRATEGY_MEDIA) == device) && 
mOutputs.valueFor(mHardwareOutput)->isUsedByStrategy(STRATEGY_MEDIA)) 
newDevice = device; 
else if (getDeviceForStrategy(STRATEGY_DTMF) == device && 
mOutputs.valueFor(mHardwareOutput)->isUsedByStrategy(STRATEGY_DTMF)) 
newDevice = device; 

10.确定输出设备AudioPolicyManager.cpp
setOutputDevice(mHardwareOutput, newDevice); 

11.最后通过alsa切换通路输出
alsa_default.cpp

论坛徽章:
0
2 [报告]
发表于 2012-05-14 14:28 |只看该作者
支持啊

论坛徽章:
13
15-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:032015亚冠之北京国安
日期:2015-10-07 14:28:19NBA常规赛纪念章
日期:2015-05-04 22:32:03处女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46寅虎
日期:2014-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56狮子座
日期:2013-09-08 08:37:52
3 [报告]
发表于 2012-05-22 11:56 |只看该作者
好强悍
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP