1,操作系统是硬件和应用程序之间的一个桥梁。通过os,app可以调用硬件的功能(接打电话,照相,游戏),而os也及时的将硬件状态的变化提供给app。android系统通过广播来告知系统硬件状态的变化,不同Action代表了不同的广播。
我的编程之路始于android,但我觉得我该走出android看编程了。
2, Intent再学习
监听屏幕解锁事件:可用来启动服务,show welcome dialog,
只需要监听 android.intent.action.USER_PRESENT(用户按下电源键点亮屏幕的行为) 即可,清单文件注册或者代码注册都可以
监听屏幕on、off事件:
需要在代码中注册监听,监听Intent.ACTION_SCREEN_OFF、Intent.ACTION_SCREEN_On 即可。
监听网络状态变化事件:
监听 android.net.conn.CONNECTIVITY_CHANGE (好像新版本sdk提供不同的action了)
监听时间变化事件:
Intent.ACTION_TIME_CHANGED 设置时间
Intent.ACTION_TIME_TICK 时间自然流逝 需要在代码中注册
Intent起着实现调用者与被调用者之间的解耦作用。
3,android 流量监控
http://developer.android.com/reference/android/net/TrafficStats.html
4,wifi,mobile data 关闭开启
/** * <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > * @date 2013-12-10 下午6:57:15 */ private void wifiSwitch(boolean on_off){ WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifi.setWifiEnabled(on_off); ConnectivityManager conn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); }
/** * For Android 2.3 and above * <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> * @date 2013-12-10 下午6:47:07 */ private boolean mobileDataSwitch(Context context, boolean enabled){ boolean result = true; final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Class conmanClass; try { conmanClass = Class.forName(conman.getClass().getName()); final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); iConnectivityManagerField.setAccessible(true); final Object iConnectivityManager = iConnectivityManagerField.get(conman); final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); setMobileDataEnabledMethod.setAccessible(true); setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); } catch (Exception e) { Log.i(TAG, "mobileDataSwitch:"+e.getMessage()); result = false; } return result; }
5,