[英]How to know if Airplane Mode is TURNED ON or TURNED OFF in BroadcastReceiver?
我在使用此解决方案的其他问题中看到了多个答案,以了解飞行模式是否已更改:
IntentFilter intentFilter = new
IntentFilter("android.intent.action.AIRPLANE_MODE_CHANGED");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AirplaneMode", "Service state changed");
}
};
context.registerReceiver(receiver, intentFilter);
但现在我想知道飞行模式是在 onReceive 方法上打开还是关闭。
谢谢你。
如该答案所述 ,您可以通过以下方式检查飞行模式状态:
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static boolean isAirplaneModeOn(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
} else {
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
}
如果返回的结果为true
,那么飞行模式为ON ,反之亦然,因此您的完整答案将是:
IntentFilter intentFilter = new
IntentFilter("android.intent.action.AIRPLANE_MODE_CHANGED");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AirplaneMode", "Service state changed");
boolean airplane_active = isAirplaneModeOn(context);
}
};
context.registerReceiver(receiver, intentFilter);
尝试这个。
IntentFilter intentFilter = new
IntentFilter("android.intent.action.AIRPLANE_MODE_CHANGED");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AirplaneMode", "Service state changed");
boolean isAirplaneMode = isAirplaneModeOn(context);
}
};
context.registerReceiver(receiver, intentFilter);
private static boolean isAirplaneModeOn(Context context) {
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
}
在Jelly Bean 4.2中,此设置已移至Settings.Global
试试这个代码。
@Override
public void onReceive(Context context, Intent intent) {
boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
if(isAirplaneModeOn){
// AP mode is on
} else {
// AP mode is off
}
}
通过使用 ContentObserver 我们也可以得到
private class SetupContentObserver extends ContentObserver {
private final Uri mDeviceProvisioned = Settings.Global.getUriFor(
Settings.Global.AIRPLANE_MODE_ON);
public SetupContentObserver(Handler handler) {
super(handler);
}
void register() {
getContentResolver().registerContentObserver(mDeviceProvisioned, false, this, UserHandle.USER_ALL);
}
@Override
public void onChange(boolean selfChange, Uri uri, int userId) {
// do actula logic
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.