我想知道是否可以专门确定Android设备是插入计算机还是只是电源。
主要原因是,当我正在开发时,我希望手机能够“保持清醒”状态,但是当它在一个晚上插入电源插座时就不能用了。
我在想,如果我可以告诉我连接的是什么,我可以使用ACTION_POWER_CONNECTED来启动服务并检查我连接的是什么USB。
答案 0 :(得分: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
答案 1 :(得分:1)
我实际上找到了选择在插入AC,USB时是否保持屏幕的确切方法,或者通过查看来源http://google.com/codesearch#409TP6F96yI/src/com/android/settings/DevelopmentSettings.java&l=95
来查看屏幕需要许可: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)
答案 2 :(得分:-3)
好吧,如果它已连接到电源并且您希望它进入睡眠状态,只需短按POWER
按钮。