是否可以确定Android设备是插入计算机还是只是电源?

时间:2011-10-03 22:42:56

标签: android android-intent

我想知道是否可以专门确定Android设备是插入计算机还是只是电源。

主要原因是,当我正在开发时,我希望手机能够“保持清醒”状态,但是当它在一个晚上插入电源插座时就不能用了。

我在想,如果我可以告诉我连接的是什么,我可以使用ACTION_POWER_CONNECTED来启动服务并检查我连接的是什么USB。

3 个答案:

答案 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按钮。