Android – USB Host İle Usb Cihaz Listesi Alma

Bazı durumlarda projemiz içerisinde mobil cihazımıza bağlı usb aygıtlara erişim ihtiyacımız olabilir. Bu gibi durumlar için android işletim sistemi içerisinde(Android 3.1 ve sonrası sürümler) kullanılabilir olan USB Host özelliği mevcuttur. Genellikle hedef cihaz erişimi için UsbManager nesnesine ihtiyaç duyarız. Daha sonra hedef cihaz ile iletişim kurmak için USBInterface ve bu Interface(ara yüz)’e bağlı UsbEndPoint nesnelerini oluşturmamız lazım. Bu işlemler sonunda doğru hedef cihaza(uç noktaya) ulaştığımızda USB iletişimi için UsbConnection yaparak iletişim kanalını açarız. Unutulmaması gereken bir nokta ise USB Host Android 3.1 sonrasını destekliyor olmasına karşın bazı mobil cihazlarda USB Host özelliği Mobil Cihaz Marka Modeline bağlıdır yani bazı mobil cihazlarda USB Host işlemini gerçekleştiremeyebilirsiniz.

Uygulamamız içerisinde USB Host kullanabilmek için gerekli manifest.xml ayarlarını ekleyerek başlıyoruz.

< ?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nrkdrk.usbhost"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses -feature android:name="android.hardware.usb.host"></uses>
    <uses -sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="29">
    </uses>
 
    <application android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name="com.nrkdrk.usbhost.MainActivity"
            android:label="@string/app_name" >
            <intent -filter>
                <action android:name="android.intent.action.MAIN"></action>
                <category android:name="android.intent.category.LAUNCHER"></category>
            </intent>
        </activity>
    </application>
 
</manifest>

Bu adım sonrasıda MainActivity içerisinde hızlıca bir button click ile işlemimizi gerçekleştireceğiz.

public class MainActivity extends Activity {

    
    Button btnUSBCheck;
    TextView textUSBInfo;
    PendingIntent mPermissionIntent;
    UsbDevice device;
    UsbManager manager;
    private static final String ACTION_USB_PERMISSION = "com.nrkdrk.usbhost.USB_PERMISSION";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnUSBCheck = (Button) findViewById(R.id.usb_check);
        textUSBInfo = (TextView) findViewById(R.id.usb_info_txt);

        btnUSBCheck.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                textUSBInfo.setText("");
                checkUSBInfo();
                // USB connect işlemleri için harici local bir fonksiyonu çalıştırıyoruz
            }
        });
 
    }
  
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
 
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ACTION_USB_PERMISSION.equals(action)) {
                synchronized (this) {
                    UsbDevice device = (UsbDevice) intent
                            .getParcelableExtra(UsbManager.EXTRA_DEVICE);
                    if (intent.getBooleanExtra(
                            UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        if (device != null) {
                            // usb cihaz iletişimi kurmak için çağrı yönetimi
                        }
                    } else {
                        Log.e("ERROR", "İzin Reddedildi" + device);
                    }
                }
            }
        }
    };

private void checkUSBInfo() {
        manager = (UsbManager) getSystemService(Context.USB_SERVICE);
        mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
                ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        registerReceiver(mUsbReceiver, filter);

        HashMap<string , UsbDevice> deviceList = manager.getDeviceList();
        Iterator<usbdevice> deviceIterator = deviceList.values().iterator();
        String usbDeviceInformation = "";
        while (deviceIterator.hasNext()) {
            device = deviceIterator.next();
            manager.requestPermission(device, mPermissionIntent);
            usbDeviceInformation += "\n" + "USBDeviceID: " + device.getDeviceId() + "\n"
                    + "USBDeviceName: " + device.getDeviceName() + "\n"
                    + "USBDeviceClass: " + device.getDeviceClass() + " - "
                    + "USBDeviceSubClass: " + device.getDeviceSubclass() + "\n"
                    + "USBVendorID: " + device.getVendorId() + "\n"
                    + "USBProductID: " + device.getProductId() + "\n";
        }
 
        textInfo.setText(usbDeviceInformation);
    }
}

Sınıf içerisinde bulunan checkUSBInfo fonksiyonu içerisinde USB kullanım izinlerini istedikten sonra usbDeviceList değişkeni içerisine usb cihazları alıyoruz. Sonrasında bir döngü ile list içerisinde bulunan usb cihazların bilgilerini textView nesnemizin içerisine set ediyoruz.

Bu uygulama usb bağlantısı olan cihazları bulmak için geliştirilmiş bir uygulamadır. Detaylı usb cihaz etkileşimi için usbHost Interface’lerini inceleyiniz. İyi geliştirmeler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir