Android 監(jiān)聽(tīng)屏幕是否鎖屏的實(shí)例代碼
今天,簡(jiǎn)單講講如何監(jiān)聽(tīng)手機(jī)屏幕是否鎖屏。
實(shí)現(xiàn)方法:
1)通過(guò)BroadcastReceiver接收廣播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可以判斷屏幕狀態(tài)是否鎖屏,但是只有屏幕狀態(tài)發(fā)生改變時(shí)才會(huì)發(fā)出廣播;
2)如果要在屏幕狀態(tài)發(fā)生改變之前就想獲取屏幕狀態(tài),可以通過(guò)反射機(jī)制調(diào)用PowerManager的isScreenOn方法 。
具體實(shí)現(xiàn),見(jiàn)代碼:
直接上代碼:
1.定義一個(gè)接收廣播的類
package com.app.lib; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; /** * Created by ${zyj} on 2016/6/21. */ public class ScreenListener { private Context mContext; private ScreenBroadcastReceiver mScreenReceiver; private ScreenStateListener mScreenStateListener; public ScreenListener(Context context) { mContext = context; mScreenReceiver = new ScreenBroadcastReceiver(); } /** * screen狀態(tài)廣播接收者 */ private class ScreenBroadcastReceiver extends BroadcastReceiver { private String action = null; @Override public void onReceive(Context context, Intent intent) { action = intent.getAction(); if (Intent.ACTION_SCREEN_ON.equals(action)) { // 開(kāi)屏 mScreenStateListener.onScreenOn(); } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 鎖屏 mScreenStateListener.onScreenOff(); } else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解鎖 mScreenStateListener.onUserPresent(); } } } /** * 開(kāi)始監(jiān)聽(tīng)screen狀態(tài) * * @param listener */ public void begin(ScreenStateListener listener) { mScreenStateListener = listener; registerListener(); getScreenState(); } /** * 獲取screen狀態(tài) */ private void getScreenState() { PowerManager manager = (PowerManager) mContext .getSystemService(Context.POWER_SERVICE); if (manager.isScreenOn()) { if (mScreenStateListener != null) { mScreenStateListener.onScreenOn(); } } else { if (mScreenStateListener != null) { mScreenStateListener.onScreenOff(); } } } /** * 停止screen狀態(tài)監(jiān)聽(tīng) */ public void unregisterListener() { mContext.unregisterReceiver(mScreenReceiver); } /** * 啟動(dòng)screen狀態(tài)廣播接收器 */ private void registerListener() { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_USER_PRESENT); mContext.registerReceiver(mScreenReceiver, filter); } public interface ScreenStateListener {// 返回給調(diào)用者屏幕狀態(tài)信息 public void onScreenOn(); public void onScreenOff(); public void onUserPresent(); } }
2、使用:
package com.app.lib; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private ScreenListener screenListener ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screenListener = new ScreenListener( MainActivity.this ) ; screenListener.begin(new ScreenListener.ScreenStateListener() { @Override public void onScreenOn() { Toast.makeText( MainActivity.this , "屏幕打開(kāi)了" , Toast.LENGTH_SHORT ).show(); } @Override public void onScreenOff() { Toast.makeText( MainActivity.this , "屏幕關(guān)閉了" , Toast.LENGTH_SHORT ).show(); } @Override public void onUserPresent() { Toast.makeText( MainActivity.this , "解鎖了" , Toast.LENGTH_SHORT ).show(); } }); } }
總結(jié)
以上所述是小編給大家介紹的Android 監(jiān)聽(tīng)屏幕是否鎖屏的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
探討Android 的屏幕滾動(dòng)操作不如 iPhone 流暢順滑的原因
雖然很多Android手機(jī)的配置都比iPhone要高,比如大多數(shù)Andorid手機(jī)的內(nèi)存都有1GB,而iPhone 4S只有512MB內(nèi)存,但用過(guò)iPhone的人都知道Android手機(jī)在使用的時(shí)候總感覺(jué)沒(méi)有那么順滑,究竟為什么會(huì)出現(xiàn)這種現(xiàn)象呢?2014-07-07Android AsyncTask 后監(jiān)聽(tīng)異步加載完畢的動(dòng)作詳解
這篇文章主要介紹了Android 使用AsyncTask 后監(jiān)聽(tīng)異步加載完畢的動(dòng)作的相關(guān)資料,需要的朋友可以參考下2016-11-11android使用surfaceview+MediaPlayer播放視頻
這篇文章主要為大家詳細(xì)介紹了android使用surfaceview+MediaPlayer播放視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(七)
這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果的第七篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08深入學(xué)習(xí)Kotlin?枚舉的簡(jiǎn)潔又高效進(jìn)階用法
這篇文章主要為大家介紹了深入學(xué)習(xí)Kotlin?枚舉簡(jiǎn)潔又高效的進(jìn)階用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Android中WebView加載的網(wǎng)頁(yè)被放大的解決辦法
這篇文章主要介紹了Android中WebView加載的網(wǎng)頁(yè)被放大的問(wèn)題的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12Android單片機(jī)與藍(lán)牙模塊通信實(shí)例代碼
這篇文章主要介紹了Android單片機(jī)與藍(lán)牙模塊通信實(shí)例代碼,非常實(shí)用,特此分享給大家,需要的朋友可以參考下2016-05-05Android使用AudioManager修改系統(tǒng)音量的方法
這篇文章主要介紹了Android使用AudioManager修改系統(tǒng)音量的方法,結(jié)合實(shí)例形式分析了AudioManager調(diào)節(jié)音量的常用方法及相關(guān)使用技巧,需要的朋友可以參考下2016-08-08Android實(shí)現(xiàn)圖片在屏幕內(nèi)縮放和移動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android控制圖片在屏幕內(nèi)縮放和移動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02