2012-06-28 11 views
8

की सक्रियता शुरू करता है हाल ही में मैं सभी नमूने और उदाहरणों के अनुसार प्रसारण रिसीवर का उपयोग करके एंड्रॉइड.hardware.usb.action.USB_DEVICE_ATTACHED का इरादा प्राप्त करने का प्रयास कर रहा हूं।USB_DEVICE_ATTACHED केवल गैलेक्सी एस 3 आईसीएस

मैंने मैनिफेस्ट में एक रिसीवर घोषित कर दिया है;

<receiver android:name=".UsbDeviceReceiver"> 
     <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
       android:resource="@xml/device_filter"/> 

मैंने गतिविधि कोड - ऑनस्टार्ट और ऑनस्टॉप रजिस्टर/रिसीवर को पंजीकरण रद्द करने में भी ऐसा ही किया है।

IntentFilter filter = new IntentFilter(); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); 

    registerReceiver(mUsbReceiver, filter); 

हालांकि, मुझे लगता है कि इरादा अभी पकड़ा गया है। लॉगकैट को देखकर मैं देख सकता हूं कि एक यूएसबी डिवाइस को जोड़ना गतिविधियों को शुरू करने के लिए देखता है, जबकि अलग-अलग डिटेच को प्रसारित करता है। उपर्युक्त नमूनों के मुताबिक, यह मामला नहीं होना चाहिए।

क्या मुझे मेटाडेटा से संबंधित कुछ कठोर याद आ रही है? मुझे एंड्रॉइड.hardware.usb.action.USB_DEVICE_DETACHED के साथ कोई समस्या नहीं है। शायद यह आकाशगंगा एस 3 पर स्थापित एंड्रॉइड संस्करण के साथ एक बग है? शायद यह एक आईसीएस 'फीचर' है।

किसी भी संबंधित जानकारी का स्वागत है!

+2

कोड (उदाहरण के लिए देखें) https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/usb/UsbSettingsManager.java करता है डिवाइस अटैचमेंट पर प्रसारण न भेजें, यह केवल उस डिवाइस को संभालने के लिए विशेष रूप से पंजीकृत गतिविधि शुरू करता है। किसी ने प्रसारण भेजने के लिए गेरिट पर एक पैच जमा किया लेकिन ऐसा लगता है कि डिजाइन दर्शन के साथ मेल नहीं खा रहा है। –

+0

हाय क्रिस, संक्षिप्त उत्तर के लिए धन्यवाद। यह एक राहत है कि यह मेरे डिवाइस के साथ सिर्फ एक मुद्दा नहीं है। क्या पैच सबमिशन अभी भी मौजूद है ताकि मैं इस व्यवहार के कारणों को और अधिक विस्तार से पढ़ सकूं? इस समय मेरा कामकाज एक अदृश्य गतिविधि और मेरा खुद का प्रसारण शामिल करने जा रहा है। यह एक हैक की तरह लगता है। जब मैं करूँगा तो मैं कोड पोस्ट करूंगा। – Gusdor

उत्तर

4

यह एक जाना जाता दोष:

http://code.google.com/p/android/issues/detail?id=25701

और यहाँ:

http://code.google.com/p/android/issues/detail?id=25703

लेकिन अपनी सांस इंतजार कर इसका समाधान हो गया करने के लिए पकड़ नहीं है। जब आप बग रिपोर्ट देख रहे हों, तो इसे तारांकित करें ताकि आपको रिपोर्ट के अपडेट की अधिसूचना मिल जाएगी। संभावना है कि यह तय करने के लिए पूछ रहे अन्य लोगों से टिप्पणियां होगी।

+0

लिंक डेव के लिए धन्यवाद। मैंने कामकाज करने के लिए खुद को इस्तीफा दे दिया है। गतिविधि शुरू होने के दौरान मैं यूएसबी का निरीक्षण करने के लिए एक नियमित कार्य निर्धारित करता हूं। मुझे यह पसंद नहीं है और यह शायद बैटरी के लिए अच्छा नहीं है लेकिन यह काफी खुशी से काम करता है। – Gusdor

1

USB_ACCESSORY_ATTACHED के लिए जो कामकाज मैंने पाया है वह सिर्फ एक बटन है जो मेरी OpenAccessory(accessory) विधि को फिर से कॉल करता है और ऐसा लगता है कि यह मेरे लिए काम कर रहा है। शायद यह USB_DEVICE_ATTACHED के लिए भी काम करेगा। बस डिवाइस को कनेक्ट किया गया/कनेक्टेड स्थिति कहीं नहीं है और यदि यह कनेक्ट नहीं है तो उपयोगकर्ता बस उस बटन को हिट कर सकता है।

संपादित करें: मैंने पाया है कि मेनिफेस्ट में android:launchMode="singleTask" डालने से USB_ACCESSORY_ATTACHED के इरादे को "रजिस्टर" लगता है, हालांकि यह कभी नहीं दिखाता है कि यह ऐसा करता है जैसे कि यह क्या कर रहा है। या onNewIntent में() http://developer.android.com/guide/topics/connectivity/usb/host.html

तो आप onResume में android.hardware.usb.action.USB_DEVICE_ATTACHED भांप() :

0

आप लक्ष्य फ़िल्टर प्रकट में यहां बताए घोषणा कर सकते हैं।

जब आपकी गतिविधि चल रही है और आप अपना यूएसबी डिवाइस संलग्न करते हैं, तो मुख्य उद्देश्य को रेज़्यूम() पर डाला जाता है लेकिन एंड्रॉइड.hardware.usb.action.USB_DEVICE_ATTACHED ऑन न्यूइन्टेंट() पर। उसके अनुसार अपने कोड समायोजित करें।

आप इस प्रकार onNewIntent() की घोषणा कर सकते हैं:

@Override 
    protected void onNewIntent(Intent intent) 
    { 
     super.onNewIntent(intent); 
     System.out.println("onNewIntent" + intent.getAction()); 
     if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intent.getAction())) { 
     mDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
     if(mDevice!= null) 
      mUsbManager.requestPermission(mDevice, mPermissionIntent); 
     } 
    } 

और onResume() इसी तरह।

एंड्रॉइड 4.0 पर परीक्षण किया गया।4 डिवाइस: सैमसंग गैलेक्सी टैब 750

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