2012-03-02 18 views
22

मैं जानना चाहता हूं कि दूरस्थ भौतिक उपकरणों में कौन सी घटनाएं सुनवाई डिवाइस में ACTION_ACL_CONNECTED और ACTION_ACL_DISCONNECTED को ट्रिगर करती हैं। मेरे परीक्षण के परिणाम कोई समझ नहीं आता है। मैं एक दूसरे के कुछ ही डेसीमीटर के भीतर कई उपकरणों इकट्ठे हुए हैं:क्या ब्लूटूथडिवाइस.एक्शन_एसीएल प्रसारण को ट्रिगर करता है?

एक Galaxy Tab P7500 चलाने वाले Android 3.1

एक i5500 फोन Android 2.2

एक ब्लूटूथ USB डोंगल

साथ एक पीसी winXP ऑन/ऑफ बटन के साथ दो हेडसेट

सबसे पहले, मैं टैब से सभी डिवाइसों के साथ मैन्युअल रूप से जोड़ता हूं। न तो पीसी और न ही फोन किसी अन्य डिवाइस के साथ जोड़ा जाता है लेकिन टैब। (हेडसेट में से किसी एक भी टैब द्वारा किसी भी तरह से नहीं पाया जा सकता है, लेकिन यह आसानी से फोन से मैन्युअल रूप से और प्रोग्रामेटिक रूप से पाया जा सकता है)। फिर मेरे पास खोज शुरू करने के लिए एक सरल ऐप है और जो एसीएल प्रसारण को सुनता है और प्रदर्शित करता है। सभी उपकरणों के साथ सक्षम टैब से

  • startDiscovery():: और यह क्या (एक ही बात हर बार, अपने पागलपन में अपनी लगातार) होता है - पीसी केवल डिवाइस पीसी पर
  • bluetooth अक्षम पाया है: - टैब
  • पर कोई प्रतिक्रिया पीसी पर ब्लूटूथ सक्षम करें: - हेडसेट 1 समय पर टैब

  • पावर पर कोई प्रतिक्रिया: - पर टैब

  • पावर बंद हेडसेट ACTION_ACL_CONNECTED: - कोई प्रतिक्रिया ओ n टैब
  • हेडसेट पर बिजली फिर से: - ACTION_ACL_DISCONNECTED और टैब पर टैब

  • bluetooth अक्षम पर जल्दी जल्दी में ACTION_ACL_CONNECTED: - टैब

  • पर कोई प्रतिक्रिया टैब पर ब्लूटूथ सक्षम करें: - फोन से टैब

  • startDiscovery पर हेडसेट ACTION_ACL_CONNECTED(): - पीसी, केवल डिवाइस फोन करके पाया है, हालांकि फोन केवल, टैब के साथ जोड़ा जातानहीं के साथ 210 पीसी अन्यथा, फोन केवल हेडसेट पर प्रतिक्रिया करता है जो टैब कभी प्रतिक्रिया नहीं करता है।

इस गड़बड़ी से क्या करना है? क्या कोई डिवाइस पर भरोसा नहीं कर सकता है जिसके कारण ACTION_ACL_CONNECT उत्पन्न होता है जब भी इसे जोड़ा जाता है और सीमा के भीतर शक्तियां होती हैं?

यहाँ BroadcastReceiver और गतिविधियों onCreate के लिए तरीके हैं, लेकिन मैं इस कोड में विवरण बात की उम्मीद नहीं करते:

BroadcastReceiver intentReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     if (device != null) { 
      name = device.getName(); 
     Log.v(TAG, "Device=" + device.getName()); 
     } 
     else { 
      name = "None"; 
     } 

     if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { 
      text1.setText(name + " connected " + (checkCounter++)); 
      Log.v(TAG, "connected: " + device); 
     } 
     else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { 
      text2.setText(name + " disconnected " + (checkCounter++)); 
     Log.v(TAG, "disconnected: " + device); 
     } 
     else if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      text3.setText(name + " found " + (checkCounter++)); 
     Log.v(TAG, "found: " + device + ""); 
     } 
     else if (blueAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { 
      text4.setText("Started " + (checkCounter++)); 
      Log.v(TAG, "Discovery started"); 
     } 
     else if (blueAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 
      text4.setText("Finished " + (checkCounter++)); 
      Log.v(TAG, "Discovery finished"); 
     } 
    } 
}; 


public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.bluetoothlayout); 

    text1 = (TextView)findViewById(R.id.textView1); 
    text2 = (TextView)findViewById(R.id.textView2); 
    text3 = (TextView)findViewById(R.id.textView3); 
    text4 = (TextView)findViewById(R.id.textView4); 

    BluetoothDevice mw600 =   blueAdapter.getRemoteDevice("58:17:0C:EB:C5:08"); 
    BluetoothDevice bt500 =   blueAdapter.getRemoteDevice("00:1D:43:00:C4:54"); 
    BluetoothDevice galaxyTab = blueAdapter.getRemoteDevice("00:07:AB:6A:96:7D"); 
    BluetoothDevice pcDongle = blueAdapter.getRemoteDevice("00:15:83:4D:8B:57"); 

    intentFilter = new IntentFilter(); 
    intentFilter.addAction(BluetoothDevice.ACTION_FOUND); 
    intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); 
    intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); 
    intentFilter.addAction(blueAdapter.ACTION_DISCOVERY_STARTED); 
    intentFilter.addAction(blueAdapter.ACTION_DISCOVERY_FINISHED); 
    if (!isReceiverRegistered) { 
     registerReceiver(intentReceiver, intentFilter); 
     isReceiverRegistered = true; 
    } 
    if (!blueAdapter.isEnabled()) { 
     blueAdapter.enable(); 
    } 
    blueAdapter.startDiscovery(); 
} 

उत्तर

14

मैं एंड्रोइड्स वास्तव में अब तक काफी कुछ समय के bt गड़बड़ के साथ काम कर रहा हूँ

ACTION_ACL_CONNECTED भेज दिया जाता है, जब भी एक सफल कनेक्शन स्थापित किया गया था:,

यहाँ मैं तुम्हें क्या बता सकते हैं है। यह जितना आसान हो उतना आसान है।

अब बल्कि कष्टप्रद हिस्सा है।

ACTION_ACL_DISCONNECTED भेजा जाता है जब भी एक हार्डवेयर स्तर पर कनेक्शन बंद हो जाता है। जब ऐसा होता है तो डिवाइस पर थोड़ा सा होता है। यदि आप अन्य डिवाइस को मैन्युअल रूप से डिस्कनेक्ट/प्लग आउट करते हैं, तो यह किसी भी तरह से "डुड, आईएम चला गया" सिग्नल नहीं भेजता है, इसके बजाय 20 सेकंड तक कुछ वॉचडॉग छाल और कनेक्शन बंद हो रहा है और इरादा भेजा जाता है।

अब मैंने केवल एसपीपी उपकरणों के साथ प्रयास किया है जो मैं कनेक्ट करता हूं। एक हेडसेट afaik सक्रिय रूप से स्वयं से कनेक्ट हो रहा है क्योंकि यह एसपीपी नहीं है। यदि आप जोड़े गए हैं और सुनने के तरीके में हैं, तो यह स्वचालित रूप से आपसे जुड़ता है। अब मैं नहीं जानता कि हेडसेट क्या करता है यदि आप इसे "बंद करें"। हो सकता है कि यह ठीक से डिस्कनेक्ट हो या शायद यह अलविदा कहने के बिना कनेक्शन को बाधित करता है। बाद के मामले में वॉचडॉग को Droid पक्ष से डिस्कनेक्ट करने में कुछ समय लगेगा, जो 0 से 20 सेकंड तक ले सकता है, मुझसे न पूछें क्यों, यह मेरा अवलोकन है।

+0

आपके साथ agrre। 10 सेकंड कनेक्शन होने के बाद, डिकनेक्ट प्रसारण प्राप्त किया जाता है –

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