我有三星Galaxy S3(目前没有安全保护),我有时会遇到问题,例如,如果我插入耳机收听FM收音机,突然关闭应用程序并断开耳机,手机仍然相信有一个插入,所以声音(扬声器和麦克风)是通往耳机插孔的路径,所以当我想和别人说话时,没有声音。
我不知道我是否能解释清楚。
我想要一种方法,当我点击一个按钮时,将声音指向正常状态(扬声器和麦克风)。我研究了一些东西,但我一无所获。我认为这段代码是正确的,但我需要一些帮助和一些建议。
这是我的代码:
public void route(Context context){
String outputDeviceName, outputDeviceName2;
try {
MediaRouter media_route = (MediaRouter)getBaseContext().getSystemService(Context.MEDIA_ROUTER_SERVICE);
Class mediaRouterClass = Class.forName("android.media.MediaRouter");
Method getSystemAudioRouteMethod = mediaRouterClass.getMethod("getSystemAudioRoute");
RouteInfo route_info = (RouteInfo)getSystemAudioRouteMethod.invoke(media_route);
Class mediaRouterStaticClass = Class.forName("android.media.MediaRouter$Static");
Field staticField = mediaRouterClass.getDeclaredField("sStatic");
Field[] array = mediaRouterStaticClass.getDeclaredFields();
for(Field one: array){
Log.i("CLASS_FIELD", "" + one.getName().toString());
}
Field normalOutputField = mediaRouterStaticClass.getDeclaredField("mSelectedRoute");
AccessibleObject.setAccessible(new AccessibleObject[]{staticField}, true);
AccessibleObject.setAccessible(new AccessibleObject[]{normalOutputField}, true);
Object speakerRoute = normalOutputField.get(staticField.get(null));
if (speakerRoute != media_route.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO)) {
// Phone, Headphone, HDMI, etc..
outputDeviceName = "name: " + route_info.getName().toString();
media_route.selectRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO, route_info);
media_route.
outputDeviceName2 = "name: " + route_info.getName().toString();
} else {
// Audio is routed to A2DP
outputDeviceName = "name: A2DP";
outputDeviceName2 = "name: " + route_info.getName().toString();
}
Log.i("outputDeviceName", ""+ outputDeviceName);
Log.i("outputDeviceName2", ""+ outputDeviceName2);
} catch (Exception e) {
e.printStackTrace();
}
}
如何路由输出声音?
答案 0 :(得分:2)
我只有评论,但我必须有50条评论的声誉。
当插入耳机时,可以将声音传送到听筒和扬声器。 您可以在Play商店中查看应用Klick。他们使用你安装在headjack中的压力点击,即使系统认为他有一个耳机插入插孔,你可以听到手机声音,就像没有耳机。
我知道当按下按钮/耳机插入插孔时,如何将声音传送到扬声器。
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(true);
但我不知道他们是如何在相同的条件下将声音传送到耳机的。我一直试图找出过去一周的声音。
到目前为止没有运气,如果有人在此期间找到了解决方案,请发布。
底线是有可能并且app证明了它。