//屏幕监视类 public class ScreenObserver { private static String TAG = "ScreenObserver"; private Context mContext; private ScreenBroadcastReceiver mScreenReceiver; private ScreenStateListener mScreenStateListener; private static Method mReflectScreenState; public ScreenObserver(Context context) { mContext = context; mScreenReceiver = new ScreenBroadcastReceiver(); try { mReflectScreenState = PowerManager.class.getMethod("isScreenOn", new Class[] {}); } catch (NoSuchMethodException nsme) { Log.d(TAG, "API < 7," + nsme); } } // screen状态广播接收者 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)) { mScreenStateListener.onScreenOn(); } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { mScreenStateListener.onScreenOff(); } } } // 请求screen状态更新 public void requestScreenStateUpdate(ScreenStateListener listener) { mScreenStateListener = listener; startScreenBroadcastReceiver(); firstGetScreenState(); } // 第一次请求screen状态 private void firstGetScreenState() { PowerManager manager = (PowerManager) mContext .getSystemService(Activity.POWER_SERVICE); if (isScreenOn(manager)) { if (mScreenStateListener != null) { mScreenStateListener.onScreenOn(); } } else { if (mScreenStateListener != null) { mScreenStateListener.onScreenOff(); } } } // 停止screen状态更新 public void stopScreenStateUpdate() { mContext.unregisterReceiver(mScreenReceiver); } // 启动screen状态广播接收器 private void startScreenBroadcastReceiver() { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); mContext.registerReceiver(mScreenReceiver, filter); } // screen是否打开状态 private static boolean isScreenOn(PowerManager pm) { boolean screenState; try { screenState = (Boolean) mReflectScreenState.invoke(pm); } catch (Exception e) { screenState = false; } return screenState; } public interface ScreenStateListener { public void onScreenOn(); public void onScreenOff(); } } //调用的例子 public class MainActivity extends Activity { private ScreenObserver mScreenObserver; private WifiManager wifiManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); mScreenObserver = new ScreenObserver(this); mScreenObserver.requestScreenStateUpdate(new ScreenStateListener() { @Override public void onScreenOn() { doSomethingOnScreenOn(); } @Override public void onScreenOff() { doSomethingOnScreenOff(); } }); } private void doSomethingOnScreenOn() { System.out.println("Screen is on"); wifiManager.setWifiEnabled(true); } private void doSomethingOnScreenOff() { System.out.println("Screen is off"); wifiManager.setWifiEnabled(false); } @Override protected void onDestroy() { super.onDestroy(); // 停止监听screen状态 mScreenObserver.stopScreenStateUpdate(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
监视屏幕开关,关闭和打开wifi
猜你喜欢
转载自zheyiw.iteye.com/blog/1871771
今日推荐
周排行