public class SettingReceiver extends BroadcastReceiver { public enum NetState {NET_NO, NET_2G, NET_3G, NET_4G, NET_WIFI, NET_UNKNOWN} public enum BluetoothState {STATE_OFF, STATE_ON} public enum WIFIState {STATE_OFF, STATE_ON} public enum GPRSState {STATE_OFF, STATE_ON} public enum AirPlaneState {STATE_OFF, STATE_ON} public enum RingerState {RINGER_MODE_NORMAL, RINGER_MODE_VIBRATE, RINGER_MODE_SILENT} private CallBack mCallBack; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (mCallBack != null) { if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { //蓝牙 //http://www.cnblogs.com/lesliefang/p/5445684.html int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); switch (state) { case BluetoothAdapter.STATE_OFF: mCallBack.getBluetoothState(BluetoothState.STATE_OFF); //case BluetoothAdapter.STATE_TURNING_OFF: break; case BluetoothAdapter.STATE_ON: //case BluetoothAdapter.STATE_TURNING_ON: mCallBack.getBluetoothState(BluetoothState.STATE_ON); break; } } else if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) { //网络 ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); mCallBack.getWIFIState(SystemUtils.isOpenWifi(context) ? WIFIState.STATE_ON : WIFIState.STATE_OFF); mCallBack.getGPRSState(SystemUtils.isOpenGPRS(context) ? GPRSState.STATE_ON : GPRSState.STATE_OFF); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnectedOrConnecting()) { switch (networkInfo.getType()) { case ConnectivityManager.TYPE_WIFI: mCallBack.getNetState(NetState.NET_WIFI); break; case ConnectivityManager.TYPE_MOBILE: switch (networkInfo.getSubtype()) { case TelephonyManager.NETWORK_TYPE_GPRS: //联通2g case TelephonyManager.NETWORK_TYPE_CDMA: //电信2g case TelephonyManager.NETWORK_TYPE_EDGE: //移动2g case TelephonyManager.NETWORK_TYPE_1xRTT: case TelephonyManager.NETWORK_TYPE_IDEN: mCallBack.getNetState(NetState.NET_2G); break; case TelephonyManager.NETWORK_TYPE_EVDO_A: //电信3g case TelephonyManager.NETWORK_TYPE_UMTS: case TelephonyManager.NETWORK_TYPE_EVDO_0: case TelephonyManager.NETWORK_TYPE_HSDPA: case TelephonyManager.NETWORK_TYPE_HSUPA: case TelephonyManager.NETWORK_TYPE_HSPA: case TelephonyManager.NETWORK_TYPE_EVDO_B: case TelephonyManager.NETWORK_TYPE_EHRPD: case TelephonyManager.NETWORK_TYPE_HSPAP: mCallBack.getNetState(NetState.NET_3G); break; case TelephonyManager.NETWORK_TYPE_LTE: mCallBack.getNetState(NetState.NET_4G); break; default: mCallBack.getNetState(NetState.NET_UNKNOWN); } break; default: mCallBack.getNetState(NetState.NET_UNKNOWN); } } else { mCallBack.getNetState(NetState.NET_NO); } } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { //电量 int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);//获得当前电量 int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); //获得总电量 int level = -1; if (rawlevel >= 0 && scale > 0) { level = (rawlevel * 100) / scale; } mCallBack.getCurrentBattery(level); } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) { int isAirplaneMode = Settings.System.getInt(context.getContentResolver(), android.provider.Settings.Global.AIRPLANE_MODE_ON, 0); mCallBack.getAirPlaneState(isAirplaneMode == 0 ? AirPlaneState.STATE_ON : AirPlaneState.STATE_OFF); } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) { AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); final int ringerMode = am.getRingerMode(); switch (ringerMode) { case AudioManager.RINGER_MODE_NORMAL: //normal mCallBack.getRingerState(RingerState.RINGER_MODE_NORMAL); break; case AudioManager.RINGER_MODE_VIBRATE: //vibrate mCallBack.getRingerState(RingerState.RINGER_MODE_VIBRATE); break; case AudioManager.RINGER_MODE_SILENT: mCallBack.getRingerState(RingerState.RINGER_MODE_SILENT); //silent break; } } } } public void setCallBack(CallBack callBack) { this.mCallBack = callBack; } public interface CallBack { public void getBluetoothState(BluetoothState state); public void getNetState(NetState state); public void getWIFIState(WIFIState state); public void getGPRSState(GPRSState state); public void getAirPlaneState(AirPlaneState state); public void getRingerState(RingerState state); public void getCurrentBattery(int level); } /** * 举例 * * @param context * @param callBack */ public static void registerReceiver(Context context, CallBack callBack) { SettingReceiver settingReceiver = new SettingReceiver(); IntentFilter bluetoothFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); IntentFilter netFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); IntentFilter airPlaneFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED); IntentFilter audioFilter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); context.registerReceiver(settingReceiver, bluetoothFilter); context.registerReceiver(settingReceiver, netFilter); context.registerReceiver(settingReceiver, batteryLevelFilter); context.registerReceiver(settingReceiver, airPlaneFilter); context.registerReceiver(settingReceiver, audioFilter); //通过回调获取信息 settingReceiver.setCallBack(callBack); } }
=======================================================
public class GpsReceiver { private LocationManager mLocationManager; private Context mContext; private final ContentObserver mGpsMonitor = new ContentObserver(null) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); boolean enabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (callBack != null) { callBack.getGpsState(enabled); //return; } } }; public GpsReceiver(Context context) { mContext = context.getApplicationContext(); mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); } // private volatile static GpsReceiver mGpsReceiver; // // public static GpsReceiver getInstance(Context context) { // GpsReceiver temp = mGpsReceiver; // if (temp == mGpsReceiver) { // synchronized (GpsReceiver.class) { // temp = mGpsReceiver; // if (temp == null) { // temp = new GpsReceiver(context); // mGpsReceiver = temp; // } // } // } // return temp; // } /** * 启动 */ public void onStart() { mContext.getContentResolver() .registerContentObserver( Settings.Secure.getUriFor(Settings.System.LOCATION_PROVIDERS_ALLOWED), false, mGpsMonitor); } /** * 取消 */ public void onStop() { mContext.getContentResolver().unregisterContentObserver(mGpsMonitor); } private CallBack callBack; public void setCallBack(CallBack callBack) { this.callBack = callBack; } public interface CallBack { public void getGpsState(boolean state); } /** * 举例 * * @param context * @param callBack */ public static void registerReceiver(Context context, CallBack callBack) { GpsReceiver gpsReceiver = new GpsReceiver(context); gpsReceiver.onStart(); gpsReceiver.setCallBack(callBack); } }
=====================================================
求解答,目前我不知道怎么获取 同步 和 屏幕旋转 的监听