2013-08-02 36 views
8

, ben http://developer.android.com/guide/topics/connectivity/usb/host.html kodlama notu izledi ve ağdaki diğer kodlamalara bakın, Birkaç kez kontrol ettikten sonra, hala sorunu bulamıyorum. Hata ayıklama işleminden sonra, UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED amacının gerçekleşmediği anlaşılıyor, çünkü Context.sendBroadcast() öğesini özelleştirilmiş bir amaç göndermek için kullanmaya çalıştığım ve BroadcastReceiver cihazımın amacını alabiliyor. Ancak USB cihazını taktığımda/çıkarırken BroadcastReceiver çalışmıyor. Kullandığım cep telefonu HTC One-X'tir, eminim ki OTG fonksiyonu, fare fonksiyonu mükemmel çalışıyor. İşte kod parçam.UsbManager.ACTION_USB_DEVICE_ATTACHED yayın Niyet alınamıyor/UsbManager.ACTION_USB_DEVICE_DETACHED Geçenlerde bir USB ana App kodlama, ama ben cihazı ekli/müstakil olay algılayamaz çünkü stucked var

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.launcher); 
    mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE); 
    if(mUsbManager == null) { 
     Log.d(TAG, "mUsbManager is null"); 
    } 

    // listen for new devices 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); 
    // filter.addAction("MyTest"); 
    registerReceiver(mUsbReceiver, filter); 

} 

BroadcastReceiver

BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "mUsbReceiver.onReceive start"); 
     String action = intent.getAction(); 
     UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
     if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { 
      setDevice(device); 
     } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { 
      if (mDevice != null && mDevice.equals(device)) { 
       setDevice(null); 
      } 
     } 
    } 
}; 

Manifest.xml res/xml

<uses-feature android:name="android.hardware.usb.host" /> 
<uses-permission android:name="android.permission.USB_PERMISSION" /> 
<uses-sdk android:minSdkVersion="12" /> 

<application> 
    <activity android:name=".USBActivity" 
     android:label="USBActivity" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    <!--  <receiver android:name=".mUsbReceiver"> --> 

     <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> 
     </intent-filter> 

     <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
      android:resource="@xml/device_filter" /> 
     <meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" 
      android:resource="@xml/device_filter" /> 
    <!--  </receiver> --> 

     </activity> 
</application> 

device_filter, 3 ayarları denedik ve hiçbir kullanım:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- iCooby mouse --> 
    <!--  <usb-device vendor-id="15d9" , /> --> 
    <!--  <usb-device vendor-id="5593" product-id="2637"/> --> 
    <usb-device /> 
</resources> 

Birisi ne olduğunu biliyorsa? ya da yayın niyetinin aktif olup olmadığını nasıl anlayacağımı söyle, çok teşekkürler.

+0

Bu bana yardımcı oldu: ** [USB bağlantı durumu yayınını nasıl alabilirim?] (Http://stackoverflow.com/questions/39942453/how-to-receive-usb-connection-status-broadcast) ** –

cevap

1

alıcı etiketi, bunu ancak sadece örtmek biliyorum tahmin ediyorum dışarı yorum. Ayrıca <receiver android:name="mUsbReceiver"> olarak bildirmeniz gerekir.

+0

teşekkürler Hatırlattığın için, daha önce denedim, ama aynı sonucu da .. – user2645035

3

Orada olması gerekmiyor, belki biraz geç, ama başkalarına yardımcı olabilir. Sadece USB cihazlarının yerleştirilmesinin algılanmasıyla benzer bir problem çözüldü. O çıkıyor - Eğer manifest bir amaç filtresini belirtilen çünkü - bir şey takıldığında Android onResume çağırır Bunu eklemeyi deneyebilirsiniz:

@Override 
protected void onResume() { 
    super.onResume(); 

    Intent intent = getIntent(); 
    if (intent != null) { 
     Log.d("onResume", "intent: " + intent.toString()); 
     if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
      // Do your thing ... 
     } 

Sonra da onCreate() yılında registerReceiver() çağrı gerekmez.. Ayrıca, niyet filtresindeki kimliğin ondalıkta olduğunu unutmayın. Yani 'lsusb' gibi komut satırı araçları tarafından sunulan değerleri dönüştürmek zorunda kalacaksınız.

+0

Teşekkürler! Sorunumu çözdüm – breceivemail