我通過the description and samples for USB host at developer.android.com工作來檢測連接和分離的USB設備。Android 3.1 USB主機 - BroadcastReceiver未收到USB_DEVICE_ATTACHED
如果我在清單文件中使用意圖過濾器來啓動我的應用程序,當一個設備連接時,它工作得很好:插入,檢測到設備,android要求啓動應用程序的權限,設備信息顯示在一張桌子裏。
我正在開發的應用程序不應僅在設備連接/分離(例如數據管理目的)時纔開始/完成。另外,如果應用程序已經運行,我不希望打開對話框彈出。所以我決定不要在設備連接時直接啓動活動,而是註冊一個BroadcastReceiver,後者應該在設備處於/分離狀態時通知活動。這個接收器很好地識別分離動作,但不能識別附加動作。
我是否缺少權限或數據屬性或類似的東西?本教程和示例沒有提及其他必要屬性。
這裏是清單文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="de.visira.smartfdr"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<uses-feature android:name="android.hardware.usb.host" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".usb.Detector">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
android:resource="@xml/device_filter" />
</receiver>
</application>
和接收器:
public class FDRDetector extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, "Action: " + action, 3).show();
// pops up only if action == DETACHED
}
我不明白爲什麼同樣的意圖過濾器的作品,如果我在使用它們一個活動,但如果它們應用於接收器則不行。即使我使用代碼設置接收器和過濾器,也無法識別附件。
我的工作環境: IDE:Eclipse的3.7與Android插件
設備:宏碁ICONIA TAB A500
安卓3.1
在此先感謝
嘗試覆蓋onNewIntent() - 當您使用android:launchMode =「singleTop」時它會被調用,並可能很好地解決您的情況。之後總是調用onResume()。 – Gusdor
你能解釋一下你的第一段「它的要點」嗎?它看起來很困惑。 –
謝謝,我一直在想同樣的事情。很高興知道這是不起作用的。聞起來像一個Android的bug對我來說。 – Brian