首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android上检测飞行模式?

如何在Android上检测飞行模式?
EN

Stack Overflow用户
提问于 2010-12-01 06:11:09
回答 11查看 63.4K关注 0票数 96

我的应用程序中有检测Wi-Fi是否处于活动连接状态的代码。如果启用了飞行模式,该代码将触发RuntimeException。无论如何,我想在此模式下显示单独的错误消息。如何可靠地检测Android设备是否处于飞行模式?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-12-01 06:16:56

代码语言:javascript
复制
/**
* 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;

}
票数 145
EN

Stack Overflow用户

发布于 2013-06-12 01:02:51

通过扩展Alex的答案以包括SDK版本检查,我们得到了:

代码语言:javascript
复制
/**
 * 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;
    }       
}
票数 97
EN

Stack Overflow用户

发布于 2010-12-01 06:24:52

如果您不想轮询飞行模式是否处于活动状态,您可以为SERVICE_STATE意图注册一个BroadcastReceiver并对其做出反应。

在你的ApplicationManifest (安卓8.0之前版本)中:

代码语言:javascript
复制
<receiver android:enabled="true" android:name=".ConnectivityReceiver">
    <intent-filter>
        <action android:name="android.intent.action.AIRPLANE_MODE"/>
    </intent-filter>
</receiver>

或以编程方式(所有Android版本):

代码语言:javascript
复制
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);

正如在其他解决方案中所描述的,您可以在通知接收者时轮询飞行模式并抛出异常。

票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4319212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档