• UsbManager, UsbDevice的简单示例


    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/msgTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Message Stub"
            android:textColor="@android:color/holo_red_light" />
    
        <Button
            android:id="@+id/retrievePrinterButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="检索打印机" />
        <Button
            android:id="@+id/requestPermissionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请求权限" />
    </LinearLayout>
    MainActivity.java
    package com.raycloud.wolf.usbmanagertest;
    
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.hardware.usb.UsbConstants;
    import android.hardware.usb.UsbDevice;
    import android.hardware.usb.UsbManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class MainActivity extends AppCompatActivity {
        private TextView msgTextView;
        private UsbManager usbManager;
        private HashSet<UsbDevice> printerSet = new HashSet();
        private BroadcastReceiver usbBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
                    Toast.makeText(context, "接入了一个USB设备", Toast.LENGTH_SHORT).show();
                    retrievePrinter();
                } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
                    Toast.makeText(context, "移除了一个USB设备", Toast.LENGTH_SHORT).show();
                    retrievePrinter();
                } else {
                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))
                        Toast.makeText(context, "已授予打印机USB权限", Toast.LENGTH_SHORT).show();
                    else
                        Toast.makeText(context, "未授予打印机USB权限", Toast.LENGTH_SHORT).show();
                }
            }
        };
        //    private final String tag = "MainActivity";
        private static final String ACTION_USB_PERMISSION_GRANTED = "com.raycloud.wolf.usbmanagertest.action.USB_PERMISSION_GRANTED";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            msgTextView = findViewById(R.id.msgTextView);
            findViewById(R.id.retrievePrinterButton).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    retrievePrinter();
                }
            });
            findViewById(R.id.requestPermissionButton).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Iterator<UsbDevice> iterator = printerSet.iterator();
                    while (iterator.hasNext()) {
                        UsbDevice usbDevice = iterator.next();
                        if (!usbManager.hasPermission(usbDevice))
                            usbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(ACTION_USB_PERMISSION_GRANTED), 0));
                        Toast.makeText(MainActivity.this, "打印机已具备USB权限", Toast.LENGTH_SHORT).show();
                    }
                }
            });
            usbManager = (UsbManager) getSystemService(USB_SERVICE);
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
            intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
            intentFilter.addAction(ACTION_USB_PERMISSION_GRANTED);
            registerReceiver(usbBroadcastReceiver, intentFilter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(usbBroadcastReceiver);
        }
    
        private void retrievePrinter() {
            HashMap deviceList = usbManager.getDeviceList();
            Iterator<UsbDevice> iterator = deviceList.values().iterator();
            int numberOfPrinters = 0;
            while (iterator.hasNext()) {
                UsbDevice usbDevice = iterator.next();
                int interfaceCount = usbDevice.getInterfaceCount();
                for (int i = 0; i != interfaceCount; ++i) {
                    if (usbDevice.getInterface(i).getInterfaceClass() == UsbConstants.USB_CLASS_PRINTER) {
                        ++numberOfPrinters;
                        printerSet.add(usbDevice);
                    }
                }
            }
            msgTextView.setText(String.format("检索到%d台打印机", numberOfPrinters));
        }
    }
  • 相关阅读:
    消息队列设计
    抓包工具Fiddler
    分布式系统和CAP
    Topshelf组件
    Parallel.For
    MVC插件
    Azure Messaging-ServiceBus Messaging
    MVC
    requireJS
    第一次react-native项目实践要点总结 good
  • 原文地址:https://www.cnblogs.com/buyishi/p/8867706.html
Copyright © 2020-2023  润新知