我的应用程序中有检测Wi-Fi是否处于活动连接状态的代码。如果启用了飞行模式,该代码将触发RuntimeException。无论如何,我想在此模式下显示单独的错误消息。如何可靠地检测Android设备是否处于飞行模式?
发布于 2010-12-01 06:16:56
/**
* Gets the state of Airplane Mode.
*
* @param context
* @return true if enabled.
*/
private static boolean isAirplaneModeOn(Context context) {
return Settings.System.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
发布于 2013-06-12 01:02:51
通过扩展Alex的答案以包括SDK版本检查,我们得到了:
/**
* Gets the state of Airplane Mode.
*
* @param context
* @return true if enabled.
*/
@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;
}
}
发布于 2010-12-01 06:24:52
如果您不想轮询飞行模式是否处于活动状态,您可以为SERVICE_STATE意图注册一个BroadcastReceiver并对其做出反应。
在你的ApplicationManifest (安卓8.0之前版本)中:
<receiver android:enabled="true" android:name=".ConnectivityReceiver">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>
或以编程方式(所有Android版本):
IntentFilter intentFilter = new IntentFilter("android.intent.action.AIRPLANE_MODE");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AirplaneMode", "Service state changed");
}
};
context.registerReceiver(receiver, intentFilter);
正如在其他解决方案中所描述的,您可以在通知接收者时轮询飞行模式并抛出异常。
https://stackoverflow.com/questions/4319212
复制相似问题