前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 9.0 飞行模式下禁用NFC 功能实现以及问题解决(二)

Android 9.0 飞行模式下禁用NFC 功能实现以及问题解决(二)

作者头像
用户7557625
发布2020-07-15 11:16:52
8720
发布2020-07-15 11:16:52
举报

Android 9.0 飞行模式下禁用NFC 功能实现以及问题解决

按照之前的方案修改代码以后,发现会有俩个问题,之前方案可以看我上面链接。 1、因为只有preference才会调用NfcAirplaneModeObserver,所以只有我们打开NFC界面时,我们的代码才会生效。也就是说,虽然我们打开飞行模式再关闭飞行模式,NFC会恢复原来状态,其实真实情况是在这个过程中NFC压根没有关闭也没有打开,我们的代码没有执行。 2、如果一直在NFC界面,关闭飞行模式前NFC是关闭的,开关一次飞行模式,NFC会打开。

WiFi和BlueTooth都是支持开启飞行模式时关闭功能,退出飞行模式时恢复WiFi和BlueTooth的原有状态。但是因为Google原来就不支持开启飞行模式时禁用NFC,所以也没有相关代码,只能我们自己实现。

下面看代码实现: 通过 NFC_DISABLED_AIRPLANE_ON 来标注NFC是原本就关闭还是因为打开飞行模式关闭的,然后在飞行模式开关时直接执行NFC的开关,这样就不需要进入NFC界面才能控制NFC状态了。

/frameworks/base/core/java/android/net/ConnectivityManager.java

代码语言:javascript
复制
private NfcAdapter mAdapter;
static final int NFC_DISABLED                      = 0;
static final int NFC_ENABLED                       = 1;
private static final int NFC_DISABLED_AIRPLANE_ON          = 2;
private int mPersistNFCState = NFC_DISABLED;


@RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
public void setAirplaneMode(boolean enable) {
    try {
        mService.setAirplaneMode(enable);
        if (!enable) {
            if (mPersistNFCState == NFC_DISABLED_AIRPLANE_ON) {
                getAdapter().enable();
            }
        } else {
            if (getAdapter().isEnabled()) {
                mPersistNFCState = NFC_DISABLED_AIRPLANE_ON; 
                getAdapter().disable();
            } else {
                mPersistNFCState = NFC_DISABLED;
                getAdapter().disable();
            }
        }
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}

private NfcAdapter getAdapter() {
    if (mAdapter == null) {
        try {
            mAdapter = NfcAdapter.getNfcAdapter(mContext);
        } catch (UnsupportedOperationException e) {
            mAdapter = null;
        }
    }
    return mAdapter;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档