2011-10-03 83 views
3

我想知道是否可以明確確定Android設備是插入計算機還是電源。是否有可能確定Android設備是插入計算機還是電源?

最主要的原因是我想讓我的手機在開發過程中插入電腦時「保持清醒」,但不是在夜晚插入電源插座時。

我在想,如果我能分辨出我連接的是什麼,我可以使用ACTION_POWER_CONNECTED來啓動服務並檢查我連接的USB。

+1

哇,這太棒了。這讓我很難過!你看過[BATTERY_PLUGGED_USB](http://developer.android.com/reference/android/os/BatteryManager.html#BATTERY_PLUGGED_USB)嗎? – Knickedi

+1

重複的http://stackoverflow.com/questions/5547359/battery-charging-notification。那個問題有你的答案。 –

+1

有一個[app](https://market.android.com/details?id=net.leppoc.android.dashboard)它已經做到了。謝謝你的提示。 – Knickedi

回答

1

我居然發現選擇是否通過查看源在http://google.com/codesearch#409TP6F96yI/src/com/android/settings/DevelopmentSettings.java&l=95

時保留插入AC,USB或放在畫面的確切方式需要權限: android.permission.WRITE_SETTINGS

Settings.System.putInt(getContentResolver(), Settings.System.STAY_ON_WHILE_PLUGGED_IN, 
       mKeepScreenOn.isChecked() ? 
       (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0); 

對於AC:BatteryManager.BATTERY_PLUGGED_AC

對於USB:BatteryManager.BATTERY_PLUGGED_USB

對於:(BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB)

-3

那麼,如果它連接到電源,並希望它進入睡眠狀態,只需短按POWER按鈕即可。

4

首先,您需要註冊一個接收器才能收聽Intent.ACTION_BATTERY_CHANGED並檢查BatteryManager.BATTERY_PLUGGED_USB。下面是代碼這樣做:


BroadcastReceiver receiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     if (plugged == BatteryManager.BATTERY_PLUGGED_USB) { 
      Toast.makeText(getApplicationContext(), "Connected to USB, Stay Awake", Toast.LENGTH_LONG).show(); 
      PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
      PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "WakeLock"); 
      wl.acquire(); 
     } 
    } 
}; 

// register the receiver to listen to battery change 
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
registerReceiver(receiver, filter); 

您還需要允許在AndroidManifest.xml中,以使保持清醒

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

另外一個音符,在某些時候,你需要註銷接收器。你可以提供通過設置頁面調用unregisterReceiver

相關問題