我有一個三星Galaxy S3(目前不安全),我有時會遇到問題,例如,如果我插入耳機聽FM收音機,突然關閉應用程序並斷開耳機,手機仍然相信有一個插入,所以聲音(揚聲器和麥克風)是路由到耳機插孔,所以當我想與某人交談時,沒有聲音。MediaRoute和路由音頻
我不知道我解釋得好。
我希望有一種方法可以在單擊按鈕時將聲音指向正常狀態(揚聲器和麥克風)。我研究了一些東西,但是我什麼也沒得到我認爲這段代碼是正確的,但我需要一些幫助和建議。
這是我的代碼:
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();
}
}
我能做些什麼來路由輸出聲音?
應用程序無法告訴系統耳機已被分離。如果系統認爲耳機仍然連接,那麼您的運氣不好。你可以嘗試重新附加它,然後再次分離它,看看是否有幫助。 – Michael
這根本不是真的。前一段時間,我爲Gingerbread(重定向輸出)做了一個類似的應用程序,但在Jelly Bean中這樣做的方法有變化,所以舊的不再有效。 :( 我認爲這是做同樣的方式:( – MAOL
嗯,我認爲一個應用程序不能告訴音頻HAL(這是做路由決定的地方)一個耳機已被分離。有些方法可以告訴它,例如您希望將某些類型的音頻路由到揚聲器,即使連接了耳機(這可能是您正在考慮的),但開始變得棘手或甚至不可能(特別是對於輸入),如果你想覆蓋所有的應用程序和所有可能的用例,或者你正在考慮現在已經廢棄的'setRouting'方法嗎? – Michael