Comment puis-je vérifier si NFC est activé ou non par programme? Est-il possible d'activer le NFC sur le périphérique à partir de mon programme? Aidez-moi, s'il vous plaît
NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter();
if (adapter != null && adapter.isEnabled()) {
// adapter exists and is enabled.
}
Vous ne pouvez pas activer le NFC par programmation. L'utilisateur doit le faire manuellement via les paramètres ou le bouton matériel.
Je suis peut-être un peu en retard ici, mais j’ai implémenté un 'complet' exemple avec détection de
J'ai également ajouté un faisceau exemple correspondant qui utilise le
nfcAdapter.isNdefPushEnabled()
méthode introduite dans les versions ultérieures d’Android pour détecter l’état du faisceau, comme en 2) et 3).
Utilisez PackageManager
et hasSystemFeature("Android.hardware.nfc")
, correspondant à l'élément <uses-feature Android:name="Android.hardware.nfc" Android:required="false" />
que vous devriez avoir dans votre manifeste.
Depuis la version 2.3.3, vous pouvez également utiliser NfcAdapter.getDefaultAdapter()
pour obtenir l'adaptateur (le cas échéant) et appeler sa méthode isEnabled()
pour vérifier si NFC est actuellement activé.
Cela peut être fait simplement en utilisant le code suivant:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
// NFC is not available for device
} else if (!nfcAdapter.isEnabled()) {
// NFC is available for device but not enabled
} else {
// NFC is enabled
}
N'oubliez pas que l'utilisateur peut désactiver NFC, même s'il utilise votre application.
Source: https://developer.Android.com/guide/topics/connectivity/nfc/nfc#manifest
Bien que vous ne puissiez pas activer vous-même le programme NFC, vous pouvez demander à l'utilisateur de l'activer en disposant d'un bouton permettant d'ouvrir les paramètres NFC comme suit:
Intent intent
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
intent = new Intent(Settings.ACTION_NFC_SETTINGS);
} else {
Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
}
startActivity(intent);