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));
}
}
UsbManager, UsbDevice的简单示例的更多相关文章
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- SignalR 简单示例
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
- Web API 简单示例
一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...
- XML引入多scheme文件约束简单示例
XML引入多scheme文件约束简单示例,用company.xsd和department.xsd来约束company.xml: company.xsd <?xml version="1 ...
随机推荐
- 【Luogu】P2331最大子矩阵(DP)
题目链接 这题的状态转移方程真是粗鄙. f[i][j][k]表示前i行用了j个矩阵状态为k的时候的最大值. k=0:两列都不选. k=1:取左弃右. k=2:选右弃左. k=3:左右都选,但分属于两个 ...
- BZOJ 4001 [TJOI2015]概率论 ——找规律
题目太神了,证明还需要用到生成函数. 鉴于自己太菜,直接抄别人的结果好了. #include <map> #include <cmath> #include <queue ...
- Linux(7):用户管理
用户管理 让一个脚本或命令开机自启动的方法: # 方法一: 把脚本放到 /etc/rc.local 中 # 方法二: 把脚本或命令通过 chkconfig 管理 # 如何让一个脚本被 chkconfi ...
- uva 10870 递推关系矩阵快速幂模
Recurrences Input: standard input Output: standard output Consider recurrent functions of the follow ...
- android soap webservers 无法执行 报错 ht.call(SOAP_ACTION, envelope);解决方法
1.可能没有加入网络访问权限,在Manifest里面加入,<uses-permission android:name="android.permission.INTERNET" ...
- Scott Mitchell的ASP.NET2.0数据指南中文版索引
原文发布时间为:2008-08-03 -- 来源于本人的百度文章 [由搬家工具导入] 原文http://www.cnblogs.com/ilovejolly/archive/2006/10/05/52 ...
- HTML 文档之 Head 最佳实践--摘抄
HTML 文档之 Head 最佳实践 story 01-10 阅读 353 收藏 0 收藏 这篇文章整理了作者认可的一些最佳实践,写在这里与各位分享 阅读原文折叠收起 HTML 文档之 Head 最佳 ...
- Aspose.Words使用代码插入表格
Aspose.Words是一款功能强大的word文档处理控件,在不需要安装word的条件下,可进行word的创建,修改,转换等操作. Aspose.Words可以简单使用该产品提供的DocumentB ...
- android之总结(一)——原
1,TextView 中实现跑马灯,需求:文字左边留置一段空白,不需要紧靠在左边:设置android:padding android:padding和android:layout_margin这个地方 ...
- 三种Model模式
目前项目中可能出现的三种Model模式,对于我们现在开发的一个项目,我觉得使用DDD的思想来设计模型比较清晰,使用DDD的思想把模型model分成了如下三种:ViewModel,它与页面相关,Doma ...