UsbManager, UsbDevice的简单示例

摘要:
activity_main。xml˂?xmlversion=“1.0”encoding=“utf-8”?

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));
    }
}

免责声明:文章转载自《UsbManager, UsbDevice的简单示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇php查看进程Django学习篇:ORM下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

将json转换为数据结构体

主要用到的依赖:(划重点:这个依赖需要加jdk版本号,不加的话用不了,且目前最高是jdk15) (ps: 用于json与其他类型格式转换,JSONObject, JSONArray等来自这个包) <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->...

(三)Java 高级特性

第一章 集合框架 集合框架是为表示和操作集合而规定的一种统一的标准系结构。集合框架都包含三个块内容对外的接口、接口的实现和集合运算的算法。 接口:表示集合的抽象数据类型,如Collection、List、Set、Map、Iterator。 实现:集合框架中接口的具体实现,如ArrayList、LinkedList、HashMap、HashSet。 算法:...

02_编程规约——集合处理

1.【强制】关于hashCode和equals的处理,必须遵循如下规则 1.1 只要重写equals,就必须重写hashCode。 1.2 因为Set存储的是不重复对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。 1.3 如果自定义对象为Map的键,那么必须重写hashCode和equals。 说明:String重...

提高Vector容器的删除效率

vector容器是类似与一个线性数组,索引效率高,插入,删除的效率很低,需要遍历数据列表,一般情况下vector的删除操作由一下函数完成: iterator erase(iterator position) //删除一个位置 iterator erase(iterator first, iterator last)...

Android 菜单(OptionMenu)大全 建立你自己的菜单

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是OptionsMenu    一、概述   public boolean onCreateOptionsMenu(Menu menu):使用此方法调用Optio...

HashMap源码和并发异常问题分析

要点源码分析 HashMap允许键值对为null;HashTable则不允许,会报空指针异常; HashMap<String, String> map= new HashMap<>(2); map.put(null,null); map.put("1",null); Hash...