2013-04-26 55 views
3

我用ACTION_MEDIA_MOUNTEDACTION_MEDIA_UNMOUNTED檢測USB連接Nexus 4,但我不能接收任何廣播信號。如何檢測Android 4.2中的USB連接?

這裏是我的廣播接收器代碼:

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_MEDIA_MOUNTED); 
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); 
filter.addDataScheme("file"); 

debugReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 
     if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) { 
      debugOn = true; 
     } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) { 
      debugOn = false; 
     } 
    } 
}; 
registerReceiver(debugReceiver, filter); 

任何想法?我也搜查了其他問題;他們說,如果我添加

"filter.addDataScheme("file");"

我會得到信號,但我已經嘗試過,並沒有得到任何。

回答

4

爲您的意圖過濾器使用UsbManager.ACTION_USB_DEVICE_ATTACHEDUsbManager.ACTION_USB_DEVICE_DETACHED

要檢查與PC的連接使用Intent.ACTION_BATTERY_CHANGEDonReceiveintent.getInt(BatteryManager.EXTRA_PLUGGED)並查看該值是否爲BatteryManager.BATTERY_PLUGGED_USB

+0

我試過你的方法,但它仍然無法獲得任何東西。我需要刪除'filter.addDataScheme(「文件」)'?我也嘗試'Intent.ACTION_POWER_CONNECTED'和'Intent.ACTION_POWER_DISCONNECTED',並且可以接收它們。但我想檢測手機連接到PC的動作。 – 2013-04-26 03:52:16

+0

我編輯了我的答案。 – 2013-04-26 04:15:35

+0

嗨,還有。此方法可能無法區分PC連接和正常充電連接,因爲如果我將手機連接到牆上充電器,「intent.getInt(BatteryManager.EXTRA_PLUGGED)」的值仍等於「BatteryManager.BATTERY_PLUGGED_USB」。 – 2013-04-26 05:28:31