custom Come posso sapere se lo schermo è acceso su Android?



appbarlayout toolbar android (5)

In Android 2.2 (Livello 7) la funzione PowerManager.IsScreenOn() restituisce un valore booleano vero se lo schermo è attivato e falso se lo schermo è spento. Sto sviluppando il codice per Android 1.5 (Livello 3). Come faccio a svolgere lo stesso compito nelle versioni precedenti di Android?

Non voglio accendere o spegnere lo schermo nel mio codice. Voglio solo sapere di cosa si tratta.


Answer #1

Puoi farlo impostando ricevitori broadcast per ACTION_SCREEN_ON e ACTION_SCREEN_OFF .


Answer #2

Sto usando la seguente funzione:

public boolean isInteractive() {
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH 
        ? powerManager.isInteractive() 
        : powerManager.isScreenOn();
}

Answer #3

C'è un modo migliore di usare BroadcastReceivers:

// If you use API20 or more:
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
    if (display.getState() != Display.STATE_OFF) {
        return true;
    }
}
return false;

// If you use less than API20:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (powerManager.isScreenOn()){ return true; }

Notare che Display.getState() può anche restituire STATE_DOZE e STATE_DOZE_SUSPEND che significa che lo schermo è STATE_DOZE_SUSPEND in un modo speciale. Maggiori informazioni su Display.getState() e i suoi valori di ritorno qui: http://developer.android.com/reference/android/view/Display.html#getState()

Si noti inoltre che sebbene la documentazione ufficiale raccomandi l'uso di isInteractive() invece di isScreenOn() , se si vuole veramente conoscere lo stato dello schermo, Display.getState() è un'opzione migliore a causa delle condizioni "speciali" che impostano lo schermo su mentre il dispositivo non è interattivo.


Answer #4

MainActivity.Java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_HEADSET_PLUG);
        filter.addAction(Intent.ACTION_POWER_CONNECTED);
        filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);

        registerReceiver(new MyReceiver(), filter);
    }
}

MyReciever.Java

public class MyReceiver extends BroadcastReceiver {

    MainActivity mActivity;

    @Override
    public void onReceive(Context arg0, Intent arg1) {

        mActivity = (MainActivity) arg0;

        TextView tv = (TextView)mActivity.findViewById(R.id.textView1);

        if(arg1.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
            tv.setText("Headset Plugin ");
        } else if(arg1.getAction().equals(Intent.ACTION_POWER_CONNECTED)) {
            tv.setText("Power Connected  ");
        } else if(arg1.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)) {
            tv.setText("Power Disconnected  ");
        } else if(arg1.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            tv.setText("Screen ON ");
        } else if(arg1.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            tv.setText("Screen OFF ");
        }   
    }
}

Answer #5

Ecco come dovresti farlo:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
boolean result= VERSION.SDK_INT>=VERSION_CODES.KITKAT_WATCH&&powerManager.isInteractive()||VERSION.SDK_INT<VERSION_CODES.KITKAT_WATCH&&powerManager.isScreenOn();
return result;




android