在我的应用程序打开时以编程方式禁用 NFC

问题描述 投票:0回答:1

我尝试在应用程序的特定屏幕打开时以编程方式禁用 NFC,但似乎唯一的方法是使用 Intents。我正在寻找一种以编程方式来实现它的方法。 另一个解决方案是当我的屏幕位于前台时防止其他应用程序拦截 NFC 标签。

我先尝试通过NfcAdapter来处理它

val nfcAdapter = NfcAdapter.getDefaultAdapter(context)

// Enable NFC if it's supported and disabled
if (nfcAdapter != null && !nfcAdapter.isEnabled) {
    nfcAdapter.enable()
}

// Disable NFC if it's enabled
if (nfcAdapter != null && nfcAdapter.isEnabled) {
    nfcAdapter.disable()
}

但是方法

enable()
disable()
在 API 级别 29 中已被删除。

比我尝试使用全局设置

val contentResolver = context.contentResolver

// Enable NFC
Settings.Global.putInt(contentResolver, Settings.Global.NFC_ON, 1)

// Disable NFC
Settings.Global.putInt(contentResolver, Settings.Global.NFC_ON, 0)

而且

Settings.Global.NFC_ON 
在 API 级别 31 中也被删除了。

除了使用 Intents 之外,我没有找到任何其他解决方案。

还有其他方法可以达到这个目的吗?

android nfc
1个回答
1
投票

无法通过设置以编程方式禁用,您需要让用户执行此操作。

您可以静默拦截所有 NFC 交互,然后不对它们执行任何操作,这对用户来说就像 NFC 已被禁用。

我在很多活动中都这样做:-

public class MainActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback{

    private NfcAdapter mNfcAdapter;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
    }


    protected void onResume() {
        super.onResume();

        if(mNfcAdapter!= null) {

        // Request all Tag types are sent to this Activity
        // With Platform sounds off, so it's silent
            mNfcAdapter.enableReaderMode(this,
                    this,
                    NfcAdapter.FLAG_READER_NFC_A |
                            NfcAdapter.FLAG_READER_NFC_B |
                            NfcAdapter.FLAG_READER_NFC_F |
                            NfcAdapter.FLAG_READER_NFC_V |
                            NfcAdapter.FLAG_READER_NFC_BARCODE |
                            NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK |
                            NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS,
                    null);
        }

    }

    protected void onPause() {
        super.onPause();
        if(mNfcAdapter!= null)
            mNfcAdapter.disableReaderMode(this);
    }

    public void onTagDiscovered(Tag tag) {
    // Do nothing when a Tag is presented
        Log.v("MainActivity", "onTagDiscovered:Start");
    }
}


© www.soinside.com 2019 - 2024. All rights reserved.