【问题标题】:Is it possible to determine whether an Android device is plugged into a computer or just power?是否可以确定 Android 设备是插入计算机还是只是电源?
【发布时间】:2011-10-05 13:19:24
【问题描述】:
我想知道是否有可能专门确定 Android 设备是插入计算机还是只是电源。
主要原因是我希望我的手机在我开发过程中插入计算机时“保持清醒”,而不是当它每晚插入电源插座时。
我在想,如果我能知道我连接的是什么,我可以使用 ACTION_POWER_CONNECTED 来启动服务并检查我连接的 USB。
【问题讨论】:
标签:
android
android-intent
【解决方案1】:
首先您需要注册一个接收器来收听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
【解决方案2】:
我实际上找到了选择在插入 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);
交流电:BatteryManager.BATTERY_PLUGGED_AC
对于 USB:BatteryManager.BATTERY_PLUGGED_USB
对于任何一个:(BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB)
【解决方案3】:
好吧,如果它已连接到电源并且您希望它进入睡眠状态,只需短按POWER 按钮即可。