2012-10-22 15 views
11

मेरे पास दो जोड़े वाले ब्लूटूथ डिवाइस हैं (फोन ऑडियो के लिए मेरी कार की हेड-यूनिट और ए 2 डीडी के लिए एक अलग ब्लूटूथ रिसीवर)। मेरे फोन पर "मीडिया ऑडियो के लिए उपयोग" के लिए एक चेकबॉक्स है जो मुझे अपने कार के स्पीकर पर जाने के लिए मैन्युअल रूप से मेरे ए 2 डीडी आउटपुट के लिए टॉगल करना है। मेरा लक्ष्य प्रोग्रामेटिक रूप से टॉगल करना है।ए 2 डीडी डिवाइस (एंड्रॉइड) टॉगलिंग

मैंने ऑडियोमैनेजर क्लास को बहिष्कृत सेट BluetoothA2dpOn और setBluetoothScoOn के साथ दोनों का उपयोग करने का प्रयास किया लेकिन न ही कोई प्रभाव पड़ा। मैं ब्लूटूथ जोड़े गए उपकरणों की एक सूची प्राप्त करने में सक्षम था और कनेक्शन को संभालने में सक्षम था जिसे मैं टॉगल करना चाहता हूं लेकिन मुझे यह बिल्कुल सही नहीं लग रहा था। मैंने डिफ़ॉल्ट ब्लूटूथ एडाप्टर प्राप्त करने का प्रयास किया और फिर getProfileProxy का उपयोग करके मुझे लगता है कि मैं वहां गलत पेड़ को भड़क रहा हूं।

क्या कोई मुझे सही दिशा में इंगित कर सकता है? असल में मैं बस इतना करना चाहता हूं कि "मीडिया ऑडियो के लिए उपयोग करें" बॉक्स को चेक करने के बराबर है।

+1

यह कौन सा फोन है, डिवाइस की नेक्सस लाइन पर सेटिंग मौजूद है? – nandeesh

+0

मैं जिस फोन का उपयोग कर रहा हूं वह गैलेक्सी एस 3 डब्ल्यू/एटी एंड टी है। मैं यह सुनिश्चित नहीं कर सकता कि यह वहां मौजूद होगा, लेकिन मुझे लगता है कि यह होगा। – JamesB41

उत्तर

0

सबसे पहले आप इस कार्यक्रम को फ़ोन पर Bluetooth सक्रिय करने के लिए निर्धारित किया है और उपकरण है, जो इसके साथ के माध्यम से

bluetoothAdapter.disable()/enable() 

(im जोड़ी बारे में निश्चित नहीं जोड़ी चाहिए चयन करने की आवश्यकता है, लेकिन यह कुछ config के माध्यम से किया जाना चाहिए गतिविधि)

तो फिर तुम A2DP स्थापित करना चाहिए कार के स्टीरियो

कनेक्ट करने का प्रयास है और इसके लिए कोड को खोजने के लिए, अगर मैं समय मैं कोशिश करते हैं और आप लेकिन इसकी एक शुरुआत के लिए यह मिलेगा इस लिंक का अनुसरण = ]

hidden & internal api's

3

कुछ समय पहले मैं एक ऐसी ही कोशिश कर एंड्रॉयड फोन के लिए एक ब्लूटूथ डिवाइस से कनेक्ट समस्या थी। यद्यपि आपकी डिवाइस प्रोफ़ाइल अलग है, मुझे लगता है कि समाधान वही है।

package android.bluetooth; 

import android.bluetooth.BluetoothDevice; 

/** 
* System private API for Bluetooth A2DP service 
* 
* {@hide} 
*/ 
interface IBluetoothA2dp { 
    boolean connectSink(in BluetoothDevice device); 
    boolean disconnectSink(in BluetoothDevice device); 
    boolean suspendSink(in BluetoothDevice device); 
    boolean resumeSink(in BluetoothDevice device); 
    BluetoothDevice[] getConnectedSinks(); 
    BluetoothDevice[] getNonDisconnectedSinks(); 
    int getSinkState(in BluetoothDevice device); 
    boolean setSinkPriority(in BluetoothDevice device, int priority); 
    int getSinkPriority(in BluetoothDevice device); 

    boolean connectSinkInternal(in BluetoothDevice device); 
    boolean disconnectSinkInternal(in BluetoothDevice device); 
} 

फिर, उन कार्यक्षमताओं तक पहुँचने के लिए, निम्नलिखित वर्ग अपनी परियोजना में डाल:

सबसे पहले आप android.bluetooth नामित अपनी परियोजना में एक पैकेज बना सकते हैं और निम्नलिखित IBluetoothA2dp.aidl वहाँ में डाल की जरूरत है

public class BluetoothA2dpConnection { 

private IBluetoothA2dp mService = null; 

public BluetoothA2dpConnection() { 

    try { 
     Class<?> classServiceManager = Class.forName("android.os.ServiceManager"); 
     Method methodGetService = classServiceManager.getMethod("getService", String.class); 
     IBinder binder = (IBinder) methodGetService.invoke(null, "bluetooth_a2dp"); 
     mService = IBluetoothA2dp.Stub.asInterface(binder); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
} 

public boolean connect(BluetoothDevice device) { 
    if (mService == null || device == null) { 
     return false; 
    } 
    try { 
     mService.connectSink(device); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

public boolean disconnect(BluetoothDevice device) { 
    if (mService == null || device == null) { 
     return false; 
    } 
    try { 
     mService.disconnectSink(device); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

}

अंत में, अपने A2DP डिवाइस कनेक्ट करने के लिए, एक ब्लू लेने युग्मित डिवाइस की सूची से etoothDevice और इसे connect विधि के पैरामीटर के रूप में भेजें। सही प्रोफ़ाइल वाला डिवाइस चुनना सुनिश्चित करें, अन्यथा आपके पास अपवाद होगा।

मैंने एंड्रॉइड संस्करण 2.3 के साथ इस फोन का परीक्षण किया है और यह ठीक काम करता है।

क्षमा करें कोई भी अंग्रेजी गलती। मैं आशा करता हूं यह आपकी मदद कर सकते हैं।

+0

मुझे नहीं लगता कि "Stub" कहां टाइप किया गया है IBluetoothA2dp, कृपया स्पष्टीकरण दें? – digiphd

संबंधित मुद्दे