java - 一段时间后检查 NFC 是否仍然启用

标签 java android nfc

我正在开发一个需要 NFC 的应用程序。我找到了一种方法来确保用户启用 nfc(如果尚未启用)...

public void nfcOnPressed(View view){

        NfcAdapter nfc = NfcAdapter.getDefaultAdapter(view.getContext());

        if (!nfc.isEnabled())
        {
            Toast.makeText(getApplicationContext(), "Activate NFC", Toast.LENGTH_LONG).show();
            startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
        } else{
            Toast.makeText(getApplicationContext(), "NFC is already activated.", Toast.LENGTH_LONG).show();
        }
    }

现在,我的问题是:用户必须转到另一个页面才能使用 nfc 功能,但如果他在过程中将其关闭,则不会在另一个页面上同时进行检查。

举个例子:我打开我的应用程序,启用 NFC,转到下一页(在转到下一页之前,另一种方法检查它是否仍然启用,如果不是,我什至无法继续),然后,显示新页面后,我将其禁用。所以现在我在新页面上显示了我可以使用 NFC 执行的所有操作,但你不能,因为我禁用了它。

有没有办法可以定时检查 NFC 是否已启用?或者有没有办法不断地检查它(即使我认为我真的不想这样做)。

如果您需要更多信息,请告诉我您需要什么。

非常感谢。 :)

最佳答案

为什么不通过广播接收器监听 NFC 状态的变化?

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

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

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

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 - Listening to NFC Adapter State Changed

关于java - 一段时间后检查 NFC 是否仍然启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32351910/

相关文章:

android - 如何在 Android 中为对齐的组件添加边距

android - 如何将日期构建附加到 gradle 上的 versionNameSuffix

Android - 如何将徽章计数添加到应用程序图标?

android - 开发 NFC 应用程序的阶段

android - 不明 Intent

android - 抛出异常,catch 部分被忽略

java - android studio中的重复输入错误

java - Hibernate 将 ID 更改为 null 并再次保存为新条目

java - 客户端发送大文件到服务器

java - 可滚动 JTextField 的大小问题