ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android – 收听NFC适配器状态已更改

2019-07-12 15:26:21  阅读:236  来源: 互联网

标签:android broadcastreceiver nfc


我正在尝试构建一个使用NFC的应用程序.目标是显示包含按钮链接的DialogFragment以进行设置并手动更改它,并在启用该功能时禁用DialogFragment.

问题:如果用户使用下拉通知托盘中的图标启用/禁用NFC,则onPause / onResume不会被调用并完全错过该条件.
我确信有一个接收器,我可以注册,并实时响应.任何想法,想法或参考将不胜感激!

以下代码检查状态是否已启用/禁用.我也在onResume事件中适当地回应它.

    NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
    NfcAdapter adapter = manager.getDefaultAdapter();

    if(adapter != null && adapter.isEnabled()) {
        detector = new NfcDetector(this);
        detector.setListener(this);
        onNfcFeatureFound();
    }
    else {
        onNfcFeatureNotFound();
    }

对于看过这篇文章的其他人,下面的代码将直接将用户带入设置以启用/禁用NFC:

startActivity(new Intent(android.provider.Settings.ACTION_NFC_SETTINGS));

解决方法:

以为我应该为寻找同样问题的其他人发布答案,因为我无法轻易找到.

将以下代码添加到您的活动onCreate()方法:

IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
this.registerReceiver(mReceiver, filter);

在您的活动中(或您喜欢的任何其他地方)声明的内部私有类:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) {
            final int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE,
                                                 NfcAdapter.STATE_OFF);
            switch (state) {
            case NfcAdapter.STATE_OFF:
                break;
            case NfcAdapter.STATE_TURNING_OFF:
                break;
            case NfcAdapter.STATE_ON:
                break;
            case NfcAdapter.STATE_TURNING_ON:
                break;
            }
        }
    }
};

@Override
public void onDestroy() {
    super.onDestroy();

    // Remove the broadcast listener
    this.unregisterReceiver(mReceiver);
}

  // The following check needs to also be added to the onResume
@Override
protected void onResume() 
    super.onResume();
  // Check for available NFC Adapter
    PackageManager pm = getPackageManager();
    NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
    NfcAdapter adapter = manager.getDefaultAdapter();

    if(adapter != null && adapter.isEnabled()) {
        createNfcDetector();
        onNfcFeatureFound();
    }
    else {
        onNfcFeatureNotFound();
    }
}

标签:android,broadcastreceiver,nfc
来源: https://codeday.me/bug/20190712/1441854.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有