如何在我的 Android 应用程序运行时限制用户连接 USB?

问题描述

当我的应用在他的 Android 手机上运行时,我希望用户停止与 PC 的 USB 连接,例如 Google Pay 和其他一些应用。如何做到这一点。当我的应用在移动设备上运行时,当用户通过 USB 将移动设备连接到 PC 时,如何向用户显示移除 USB 连接的警报?

解决方法

A1:您说“用户经常将他们的设备连接到他们的计算机以将音乐添加到应用程序文件夹中”,我猜您的意思是SD卡以MassStorage模式连接到PC,您可以将其检查为以下:

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_SHARED.equals(state)) {
    // Sd card has connected to PC in MSC mode
}

A2:你说“如果用户在连接到 USB 后启动应用程序,这将不起作用”,我不能同意你的看法,在 ICS 中,你可以注册一个接收器来监听 android.hardware.action.USB_STATE 变化,系统广播的意图处于STICKY模式,也就是说即使你的应用程序中的接收器在USB线连接后注册,你也可以得到这个消息:

Intent intent = context.registerReceiver(...);
if (intent != null) {
    boolean isConnected = intent.getBooleanExtra(USB_CONNECTED,false);
    boolean isMscConnection = intent.getBooleanExtra(USB_FUNCTION_MASS_STORAGE,false);
}

在上述方法中返回的意图是您在 USB 电缆连接到 PC 之前错过的消息

详情请参考以下链接: http://www.androidadb.com/source/toolib-read-only/frameworks/base/core/java/android/hardware/usb/UsbManager.java.html

或者您可以使用 intentfilder 检查电池状态

你可以使用这个 IntentFilter :

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null,ifilter);

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS,-1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                 status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

如果 isChargingusbCharge 布尔值设置为 true,则您通过 USB 连接到 PC。

发现于 http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

,

如果您想完全禁止任何 USB 连接,那么一种方法是在您的应用程序通过 getDeviceList() 启动时查询连接的所有设备的 USBManager 并验证列表大小是否为0 表示未连接任何设备。对于任何进一步的连接,您始终可以侦听意图 ACTION_USB_ACCESSORY_ATTACHED 并在应用程序生命周期中连接设备时显示弹出窗口。所以:

  1. 在启动应用程序时注册意图 ACTION_USB_ACCESSORY_ATTACHED/ACTION_USB_ACCESSORY_DETACHED

  2. 通过USBManager查询getDeviceList(),确认返回列表大小为0。

  3. 如果不为零,则等待用户分离设备并通过 ACTION_USB_ACCESSORY_DETACHED 继续验证,直到 getDeviceList() 不返回零大小列表。

  4. 继续监控 USB 活动的意图,并在设备连接时提示用户断开设备。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...