Android監聽屏幕解鎖和判斷屏幕狀態

jopen 10年前發布 | 118K 次閱讀 Android Android開發 移動開發

開發后臺服務的時候經常需要對屏幕狀態進行判斷,如果是想要監聽屏幕解鎖事件,可以在配置里面注冊action為 android.intent.action.USER_PRESENT的廣播,則可以監聽解鎖事件。但有時候,在后臺執行某個操作時,需要主動判斷屏幕的狀態,比如是否是亮著的,可以使用PowerManager的isScreenOn方法進行判斷,比如屏幕是否開啟了自動旋轉等。

注冊監聽解鎖廣播:

    <receiver android:name="com.home.testscreen.MyReceiver">  
                <intent-filter>  
                    <action android:name="android.intent.action.USER_PRESENT" />  
                </intent-filter>  
            </receiver>  


MyReceiver:

    package com.home.testscreen;  

    import android.content.BroadcastReceiver;  
    import android.content.Context;  
    import android.content.Intent;  
    import android.widget.Toast;  

    public class MyReceiver extends BroadcastReceiver {  

        @Override  
        public void onReceive(Context context, Intent intent) {  
            // 解鎖  
            if (intent != null  
                    && Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {  
                Toast.makeText(context, "屏幕已解鎖", Toast.LENGTH_SHORT).show();  
            }  
        }  

    }  

主動判斷屏幕是否亮著:

    public boolean isScreenOn(Context context) {  
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);  
        if (pm.isScreenOn()) {  
            return true;  
        }  
        return false;  
    }  


判斷是否開啟了重力感應:

/** 
 * 是否開啟了重力感應 
 * @param context 
 * @return 
 */  
public boolean screenIsOpenRotate(Context context) {  
    int gravity = 0;  
    try {  
        gravity = Settings.System.getInt(context.getContentResolver(),  
                Settings.System.ACCELEROMETER_ROTATION);  
    } catch (SettingNotFoundException e) {  
        e.printStackTrace();  
    }  
    if (gravity == 1) {  
        return true;  
    }  
    return false;  
}  
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!