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的简单示例的更多相关文章

  1. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  2. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  3. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  5. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  6. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  7. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

  8. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  9. XML引入多scheme文件约束简单示例

    XML引入多scheme文件约束简单示例,用company.xsd和department.xsd来约束company.xml: company.xsd <?xml version="1 ...

随机推荐

  1. Python之回调函数

    在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 有两种类型的回调函数:即bloc ...

  2. BZOJ 3990 [SDOI2015]排序 ——搜索

    [题目分析] 可以发现,操作的先后顺序是不影响结果的,那么答案就是n!的和. 可以从小的步骤开始搜索,使得每一个当前最小的块都是上升的数列,然后看看是否可行即可. 复杂度好像是4^n [代码](哪里写 ...

  3. 常州模拟赛d4t3 字符串划分

    题目描述 给你一串由小写字母组成的字符串,希望你把它划分成一些小段,使得每一小段字符串中的字母 都不相同,并且希望分的段数尽量少. 然后,把这些小段按字典序排序后输出,中间由一个空格分隔. 例如:字符 ...

  4. 【loj6029】「雅礼集训 2017 Day1」市场

    题目 题意:四种操作,区间加法.区间除法(下取整).区间求最小值.区间求和. 第1.3.4个操作都是摆设,关键在于如何做区间除法. 很明显不能直接把区间的和做除法后向下取整,因为区间和可能会多凑出一个 ...

  5. 将一个list均分成n个list

    /** * 将一个list均分成n个list,主要通过偏移量来实现的 * @param source * @return */ public <T> List<List<T&g ...

  6. Codevs 1043 ==洛谷 P1004 方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  7. 【BZOJ2049】洞穴勘测(LCT)

    题意:一张图,要求支持以下操作: 1.加边 2.删边 3.询问两点之间是否联通 100%的数据满足n≤10000, m≤200000 思路:LCT裸题,不需要维护任何信息 ..,..]of longi ...

  8. C++ assert 的一点说明

    断言(ASSERT)的用法 转载自http://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html 我一直以为assert仅仅是个报错函数 ...

  9. MongoDB存储引擎(上)——MMAPv1

    3.0版本以前,MongoDB只有一个存储引擎——MMAP,MongoDB3.0引进了一个新的存储引擎——WiredTiger,同时对原有的MMAP引擎进行改进,产生MMAPv1存储引擎,并将其设置为 ...

  10. Delphi使用进行post数据时超时设置

    因项目需要进行http的post提交数据,开始时用indy的idHttp组件,但是测试时发现当网络中断(如拔掉网线),idHttp的超时设置无效果,要等20秒才提示超时(参考网上的做法,将indy9升 ...