USB_DEVICE_ATTACHED Intenção não triggersndo

Alguém lá fora, conseguiu obter o android.hairdwaire.usb.action.USB_DEVICE_ATTACHED "paira funcionair?

Ok, então estou tentando usair os novos resources do modo host usb paira detectair quando um dispositivo usb está conectado. Paira os meus propósitos, eu quero ser notificado sempre que um dispositivo estiview anexado. Não consegui view isso acontecer. Estou usando um receptor de transmissão que conheço obras (quando eu tenho que ouvir outras coisas, como o button inicial sendo pressionado. Não importa o que eu tente, não consigo entender a intenção de triggersr … Então, paira tornair as coisas mais simples eu decidi esquecer meu projeto e tentair usair o próprio código de exemplo do google e view se eu poderia, pelo less, fazer isso funcionair. Eu não tenho um do lançador de missões, mas achei que eu poderia pelo less obter o USB_Device_Attached paira triggersr. Não fui. Adaptei o código paira trabalhair com outros dispositivos. Primeiro tentei ajustair o filter de dispositivo xml. Eu adicionei meu dispositivo (um keyboard):

  • Cor resolvida em vez de um ID de recurso
  • Framework de server REST paira Android
  • Aplicação cairregando as texturas erradas na abertura novamente
  • Exemplo de JakeWhairtons DiskLruCache
  • Fazendo uma image circulair com borda circulair branca
  • O que viewifica a checkbox de seleção "Biblioteca" é "Sob a tampa"?
  • <usb-device vendor-id="1050" product-id="0010" /> 

    Recebi o fornecedor e o produto de um command lsusb. Quando o dispositivo está conectado, o logcat mostra que o dispositivo é encontrado

     D/EventHub( 144): No input device configuration file found for device 'Yubico Yubico Yubikey II'. I/EventHub( 144): New device: id=43, fd=219, path='/dev/input/event8', name='Yubico Yubico Yubikey II', classs=0x80000003, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyChairacterMap='/system/usr/keychairs/Generic.kcm', builtinKeyboaird=false I/InputReader( 144): Device added: id=43, name='Yubico Yubico Yubikey II', sources=0x00000101 I/ActivityManager( 144): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=2/1/1 nav=1/2 orien=L layout=0x10000014 uiMode=0x11 seq=47} D/MissileLauncherActivity(16191): intent: android.intent.action.MAIN I/EventHub( 144): Removed device: path=/dev/input/event8 name=Yubico Yubico Yubikey II id=43 fd=219 classs=0x80000003 I/InputReader( 144): Device removed: id=43, name='Yubico Yubico Yubikey II', sources=0x00000101 I/ActivityManager( 144): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=1/1/2 nav=1/2 orien=L layout=0x10000014 uiMode=0x11 seq=48} D/dalvikvm( 144): GC_EXPLICIT freed 78K, 26% free 14717K/19719K, paused 3ms+3ms D/MissileLauncherActivity(16191): intent: android.intent.action.MAIN 

    O xoom encontra o keyboard e é utilizável do dispositivo (eu posso usá-lo no browser paira digitair letras). E o tipo de incêndio intencionado (mas ele só triggers o android.intent.action.MAIN), eu nunca recebo a intenção DEVICE_ATTACHED. A input de log vem do código de exemplo:

     Log.d(TAG, "intent: " + intent.getAction().toString()); 

    Na function de currículo. Depois de mais cavair e remoview qualquer reference ao usb, descobri que cada aplicativo que eu fiz obter o currículo chamado quando um keyboard é anexado / destacado (daí a intenção: input de registro android.intent.action.MAIN). Agora o único que posso imaginair é que é um bug na fonte do Android. Aliás, estou usando um wifi xoom com os 3.1.

  • Adicionando regras personalizadas
  • Dados de pré-visualização de 60 / 120fps em um dispositivo Android?
  • O Android ShairedPreferences não está salvando
  • como conviewter cadeia Data paira milhas por segundo
  • Fazendo um elemento do meio paira ficair preso no header (ScrollView / ListView)
  • "Visualização de Conteúdo ainda não Criado" em Fragmentos de Android
  • 10 Solutions collect form web for “USB_DEVICE_ATTACHED Intenção não triggersndo”

    Eu também tive o mesmo problema. Eu finalmente descobri que no filter de dispositivo xml devemos adicionair a seguinte linha.

     <usb-device vendor-id-"xxxxx" product-id="yyyyy"> 

    o xxxxx e aaaaa devem ser numbers decimais. NÃO CÓDIGOS HEX. Então tudo funciona como anunciado! Eu sei que está atrasado, mas espero que isso ajude.

    Então findi uma solução paira o meu problema e aprendi muito, espero que possa ajudair alguém.

    Então, primeiro, os dispositivos HID não lançam qualquer intenção . Nem eles apairecem na list mUsbManager.getDeviceList() . Outras coisas, no entanto, fazem. Eu dei uma bairra de memory usb e, o que você conhece, o dispositivo está listdo na list de dispositivos. Eu também descobri que o dispositivo retornado não possui uma class, subclass ou protocolo. A debugging revelou que a interface pai, contudo, possuía a class / subclass adequada e o protocolo. Além disso, se você deve ter um filter de dispositivo. Eu acabei com uma class=0008 (USB STORAGE) paira funcionair paira os meus propósitos. Eu acho que outras classs também funcionairiam.

    Então, agora paira descobrir intenções. Descreve que a intenção deve ser anexada a uma atividade de ativação. Minhas tentativas de anexá-lo a um service ou receptor não terão frutos. Então, agora que estou tentando triggersr, vejo as notifications emergentes quando eu conto meu dispositivo (memory stick usb) que me pede paira configurair meu aplicativo como padrão paira esse dispositivo. Perfeito agora, meu aplicativo é executado toda vez que eu conto esse dispositivo. Observe que você será solicitado paira cada dispositivo exclusivo. Mas apenas uma vez. Pairece ser registrado como programas padrão.

    Bem, acho que isso resume o que findi. muito ruim, você não pode ser notificado quando um keyboard / mouse se encontra em anexo. Ah, e mais uma coisa. Não há nenhum problema com o kernel tiamat, funcionando agora e sem problemas.

    Recentemente, descobri uma solução paira um problema semelhante.

    Como alguém já observou, os HID devices não lançam uma intenção , o que eu acho que foi seu problema.

    No entanto, uma questão relacionada é que, se o seu programa estiview configurado paira ser executado quando um dispositivo USB estiview conectado, mesmo quando o aplicativo estiview em execução, você não poderá capturair a ação USB_DEVICE_ATTACHED . Em vez disso, o sistema vê essa intenção e diz "oh, isso significa que esse aplicativo quer executair (conforme declairado no seu manifesto) e, em seguida, ele envia a ação android.intent.action.MAIN em vez da ação USB_DEVICE_ATTACHED e chama onResume() . Mesmo que o seu aplicativo esteja funcionando. Portanto, tanto quanto eu posso dizer, NÃO PODE capturair a intenção USB_DEVICE_ATTACHED se o seu manifesto declaira que seu aplicativo será executado quando os dispositivos USB estiviewem conectados. Você só precisa colocair algum código no onResume() paira viewificair se o USB está conectado. Mesmo que seu programa esteja funcionando, onResume será chamado novamente quando um dispositivo USB estiview conectado.

    Eu observo minha solução com mais detalhes aqui: Android 3.1 USB-Host – BroadcastReceiview não recebe USB_DEVICE_ATTACHED

    Enumerando dispositivos

    Se o seu aplicativo estiview interessado em inspecionair todos os dispositivos USB atualmente conectados enquanto o aplicativo está sendo executado, ele pode enumerair dispositivos no ônibus. Use o método getDeviceList () paira obter um mapa hash de todos os dispositivos USB que estão conectados. O mapa hash é introduzido pelo nome do dispositivo USB se desejair obter um dispositivo do mapa.

     UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 

    Se desejair, você também pode obter um iterador do mapa hash e processair cada dispositivo um a um:

     UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); while(deviceIterator.hasNext()){ UsbDevice device = deviceIterator.next() //your code } 

    Outra solução alternativa é usair

     new FileObserview("/dev/input") { @Oviewride public void onEvent(int event, String path) { //gets called on input device insert / remove } }; } new FileObserview("/dev/input") { @Oviewride public void onEvent(int event, String path) { //gets called on input device insert / remove } }; 

    que funcionairá paira alguns dispositivos usb (keyboard e mouse)

    OK mais trabalho, mais crashs, mas alguns progressos.

    Descobri mais da documentation do sdk. Pairece que você precisa ter o filter do dispositivo paira usair as intenções. então eu decidi tentair usair um filter de class em vez dos IDs de fornecedor / produto. Eu acho que seria mais geral e espero pegair o dispositivo escondido. Eu usei 03h como ID da class, tentei vários formats, tentei as subclasss, até usei lsusb paira descobrir, class, subclass e protocolo do meu dispositivo. Isso não pairecia ajudair. então fui mais adiante paira a documentation do sdk e decidi tentair enumerair todos os dispositivos paira view o que os OS viram a class / subclass / integer do protocolo. Eu copiei o código colado no ouvinte do clique e adicione declairações log.v. nada mostra no logcat.

    Pairece, como o sistema dos EUA não está vendo nenhum dispositivo (mesmo que o dispositivo realmente funcione). Agora isso é muito indicado pela intenção do dispositivo USB de não triggersr. agora devo dizer que estou usando um kernel personalizado no meu xoom (tiamat). Eu pensei que isso poderia ter algo a view com o problema há algum tempo, então eu voltei paira estoque 3.1. e ainda agora progridem. agora isso foi há algum tempo, antes de tentair enumerair, então agora vou voltair a agaian e continuair trabalhando com estoque até ter certeza de que o kernel não é o problema. Vou viewificair novamente quando eu descobri mais. sucesso ou fracasso. clairo, se alguém mais destrói isso melhor do que eu, por favor, toque. Uma última nota, estou preocupada com o modo otg anfitrião integer quando vi isso na documentation. Observe que o coe é idêntico, mesmo que tenha achado que ele faz reference a dois methods de enumeração. Provavelmente apenas um erro de escritor de cópia, mas ainda se preocupa com a luz de toda essa crash.

    Isto é o que eu fiz paira detectair USB / Media Connect.

    Arquivo manifesto

      <receiview android:name=".UsbReceiview" android:enabled="true" > <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED"/> <action android:name="android.intent.action.MEDIA_UNMOUNTED"/> <data android:scheme="file"/> </intent-filter> </receiview> 

    Não fiz nada na atividade nem no meu receptor.

    pairece que esta linha está fazendo as coisas.

     <data android:scheme="file"/> 

    Do meu teste, o Android pode triggersr uma intenção quando um dispositivo HID está conectado. (O aplicativo de exemplo MissileLauncher faz exatamente isso. Consulte o código fonte da amostra paira obter mais informações.)

    O Lançador de Mísseis (Dream Cheeky USB Missle Launcher) O dispositivo HID tem sua subclass e o protocolo definido paira 0x00. Paira mais informações, veja: http://www.mattcutts.com/blog/playing-with-a-usb-missile-launcher/

    A ressalva é que o Android não lança uma intenção paira dispositivos de mouse e keyboard especificamente (talvez mais). No entanto, posso detectair dispositivos HID que tenham sua InterfaceClass = 0x03, InterfaceSubClass = 0x00, InterfaceProtocol = 0x00. Paira o meu aplicativo, meu dispositivo HID é um controlador integrado, portanto, definir a subclass e o protocolo não é um problema.

    Eu tenho o meu conjunto de aplicativos como launchMode="singleTop" e, nesse modo, pairece ser getIntent().getAction() é sempre igual à ação que iniciou o aplicativo.

    Então, se você iniciair o aplicativo manualmente e, em seguida, conectair um dispositivo (mesmo depois de se desligair daquele aplicativo), você receberá android.intent.action.MAIN .

    Se você mata o aplicativo e depois conecte o dispositivo, você sempre obterá o android.hairdwaire.usb.action.USB_DEVICE_ATTACHED , mesmo de mudair e voltair paira seu aplicativo, ou mesmo paira girair o dispositivo .

    Na viewdade, recebo curiosamente as intenções ao desconectair o dispositivo USB, que eu não acho que esteja documentado – mas é clairo que recebo USB_DEVICE_ATTACHED quando meu dispositivo está sepairado.

    Sem o singleTop , ele faz um tipo de trabalho conforme o esperado, mas você obtém outra atividade extra estúpida se seu aplicativo já estiview aberto e você conectair o dispositivo.

    Mais uma vez, a API do Android é buggy, excessivamente complicada e difícil de usair.

    Conecte o keyboard Usb NÃO acione USB_DEVICE_ATTACHED .

    Em vez disso, o sistema irá triggersr Intent.ACTION_CONFIGURATION_CHANGED . No entanto, como há uma alteração de configuration, o sistema irá reiniciair a atividade. Você não pegairá a ação com a atividade reiniciada. Neste caso, você precisa adicionair o Android: configChanges = "keyboard | keyboardHidden" no seu Manifesto do Android paira que a Atividade não seja reiniciada assim que um keyboard externo estiview conectado.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.