簡體   English   中英

當我的 Android 應用程序正在運行時,如何限制用戶連接 USB?

[英]How to restrict user to connect USB when my Android app is running?

當我的應用程序在他的 Android 手機(如 Google Pay 和其他一些應用程序)上運行時,我希望用戶停止 USB 與 PC 的連接。 如何做到這一點。 當我的應用程序在該手機上運行時,當他通過 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的變化,系統廣播的intent處於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);
}

you missed before usb cable connection to PC.上述方法中返回的意圖 在 usb 電纜連接到 PC 之前您錯過的

詳情請參考以下鏈接: http://www.androidadb.com/source/toolib-read-only/frameworks/base/core/java/android/hardware/usb/UsbManager.java.ZFC335FDC70D5FC76DAC76D

或者您可以使用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. 通過getDeviceList()查詢USBManager ,確認返回列表的大小為0。

  3. 如果不為零,則等待用戶分離設備並通過ACTION_USB_ACCESSORY_DETACHED繼續驗證,直到getDeviceList()不返回零大小列表。

  4. 繼續監視 USB 活動的意圖,並在設備連接時提示用戶分離設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM