2015-02-23 30 views
5

Android UsbHost API'sını kullanarak USB üzerinden birkaç özel cihazla konuşabilen bir android programı yazdım. Bu, 4.4'te gayet iyi çalışıyor, ancak 5.0'da bazı aygıtlar arayüzlerini kaçırıyorlar (getInterfaceCount() == 0).Android 5.0 Lollipop UsbDevice eksik arayüzleri

Onları CM11 ile bir Galaxy Note 3 üzerinde kullanıyorum ve iyi çalışıyorlar, ancak CM'nin bu sürümü kararsız olduğundan CM12'ye yükseltmeye çalıştım. Sorun ortaya çıktı ve bir CM hatası olabileceğini düşündüm, bu yüzden google'ın 5.0 sürümünde bir Nexus 5 cihazını/arabirimini numaralandıran basit bir program denedim ve sorun da var.

Bir Button ile basit bir test uygulaması oluşturulur ve bir OnClickListener ile TextView'un olarak ayarlayın: cihazlar bir OTG kablo ile telefona takılı bir göbek içerisine asılırlar

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test_usb); 

    Button button = (Button) findViewById(R.id.butt); 
    final TextView text = (TextView) findViewById(R.id.text); 
    final UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String string = ""; 
      if(manager == null) 
       string += "no usb manager"; 
      else { 
       for(UsbDevice device : manager.getDeviceList().values()) { 
        string += device.toString() + "\n"; 
        string += String.format(" ifc: %d\n", device.getInterfaceCount()); 
       } 
      } 

      text.setText(string); 
     } 
    }); 
} 

. Bu kod 5.0'da çalıştırıldığında, aygıtlar listelenir, ancak listedeki yalnızca bir aygıtın aslında arabirimleri vardır (ve her zaman aynı aygıt değildir). Ancak, ADB ile telefona bağlanırsam, tüm cihazları ve arayüzlerini 'cat/sys/kernel/debug/usb/devices' ile görebiliyorum.

Bu, 5.0'da bir hata mı, yoksa USB API'si değişmiş mi? Çevrimiçi olarak hiçbir bilgiyi bulamadım.

+0

Benzer bir sorun yaşıyorum. Benim durumumda, telefonumu cihazıma takılıyken önyükleme yaparsam zaten bir arabirim olmadan bir UsbDevice ile bir niyetim olur. Cihazı fişten çeker ve tekrar takarsam doğru arabirimlere sahip bir UsbDevice alırım. Bir şey bulursam haber vereceğim. Grepcode'daki UsbDevice kaynağına bakıldığında, arayüzlerin alınma biçimi Lolleypop'ta değişmiştir (Bkz. Http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1 /android/hardware/usb/UsbDevice.java#UsbDevice.getInterfaceList%28%29) – Jim

cevap

İlgili konular