Is it possible to determine whether an Android device is plugged into a computer or just power?

前端 未结 3 1105
野性不改
野性不改 2020-12-19 20:46

I was wondering if it was possible to specifically determine if an Android device was plugged into a computer or just power.

The main reason is I\'d like for my phon

相关标签:
3条回答
  • 2020-12-19 21:14

    I actually found the exact way to choose whether to keep the screen on when plugged into AC, USB or either by looking into the source at http://google.com/codesearch#409TP6F96yI/src/com/android/settings/DevelopmentSettings.java&l=95

    Requires permission: 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);
    

    For AC: BatteryManager.BATTERY_PLUGGED_AC

    For USB: BatteryManager.BATTERY_PLUGGED_USB

    For Either: (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB)

    0 讨论(0)
  • 2020-12-19 21:17

    First you need to register a receiver to listen to Intent.ACTION_BATTERY_CHANGED and check for the BatteryManager.BATTERY_PLUGGED_USB. Below is the code to do so:

    
    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);
    

    You also need the permission in your AndroidManifest.xml to enable staying awake

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

    One other note, at some point you will need to unregister the receiver. You could provide that via settings page to call unregisterReceiver

    0 讨论(0)
  • 2020-12-19 21:29

    Well, if it's connected to the power supply and you want it to go to sleep just short press the POWER button.

    0 讨论(0)
提交回复
热议问题