Android - Listening to NFC Adapter State Changed

后端 未结 2 1524
臣服心动
臣服心动 2021-01-19 15:59

I am trying to build an application which uses NFC. The goal is to display a DialogFragment containing a button link to go the settings and change it manually and when the f

相关标签:
2条回答
  • 2021-01-19 16:29

    Thought I should post the answer for other people looking for the same problem, since I wasn't able to find one easily.

    Add the following code to your activities onCreate() method:

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

    Inner private class declared within your activity (or anywhere else you like):

    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
        NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
    
        if(adapter != null && adapter.isEnabled()) {
            createNfcDetector();
            //NFC is available on device, but disabled
        }
        else {
            //NFC Is available and enabled
        }
    }
    
    0 讨论(0)
  • 2021-01-19 16:37

    You can use ACTION_ADAPTER_STATE_CHANGED to receive a broadcast message when the state of the adapter changes, but that option is only available in API 18 and above. See this for the documentation.

    For prior to 18, I don't know of a way to do this unfortunately.

    Also, as an aside, the android.provider.Settings.ACTION_NFC_SETTINGS will work on API levels 16 and above. For prior versions, the NFC settings are under "wireless settings". Take a look at the ensureSensorIsOn method at the bottom of this blog post for a code sample that checks against the API level and redirects to the correct settings pane.

    0 讨论(0)
提交回复
热议问题