1

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

4

2 回答 2

1

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上找到

于 2021-05-12T14:22:12.923 回答
0

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

  1. 注册意图ACTION_USB_ACCESSORY_ATTACHED/ACTION_USB_ACCESSORY_DETACHED启动您的应用程序

  2. 查询过USBManagergetDeviceList(),确认返回列表的大小为0。

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

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

于 2021-05-13T08:42:54.000 回答