web-dev-qa-db-fra.com

Android: Changer NFC paramètres (on/off) par programmation

J'essaie de modifier les paramètres NFC (activé/désactivé) par programme sur Android 2.3.3.

Sur le téléphone, sous "Paramètres réseau et sans fil",
vous pouvez choisir d’utiliser ou non NFC pour lire et échanger des tags ou non.

Je voudrais donc basculer ce paramètre dans mon application.
Mais je n'arrive pas à trouver une api pour ça.

Je cherche un code qui ressemblerait probablement à ceci: 

WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled( on/off );
22
dosa

Vous ne pouvez pas activer le on/off manuellement, mais vous pouvez envoyer l'utilisateur aux préférences s'il s'agit de off:

    if (!nfcForegroundUtil.getNfc().isEnabled())
    {
        Toast.makeText(getApplicationContext(), "Please activate NFC and press Back to return to the application!", Toast.LENGTH_LONG).show();
        startActivity(new Intent(Android.provider.Settings.ACTION_WIRELESS_SETTINGS));
    }

La méthode getNfc() renvoie simplement la nfcadapter:

nfc = NfcAdapter.getDefaultAdapter (activity.getApplicationContext ());

31
Sven Haiges

Ce n'est pas possible par programme sans dispositif d'enracinement. Mais vous pouvez démarrer NFC Settings Activity par une action intentionnelle Settings.ACTION_NFC_SETTINGS pour les API de niveau 16 et supérieur. Pour les api <16, utilisez Settings.ACTION_WIRELESS_SETTINGS 

La réponse précédemment sélectionnée suggère d'utiliser WIFI_SETTINGS mais nous pouvons passer directement à NFC_SETTINGS

Voici l'exemple:

Android.nfc.NfcAdapter mNfcAdapter= Android.nfc.NfcAdapter.getDefaultAdapter(v.getContext());

            if (!mNfcAdapter.isEnabled()) {

                AlertDialog.Builder alertbox = new AlertDialog.Builder(v.getContext());
                alertbox.setTitle("Info");
                alertbox.setMessage(getString(R.string.msg_nfcon));
                alertbox.setPositiveButton("Turn On", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                            Intent intent = new Intent(Settings.ACTION_NFC_SETTINGS);
                            startActivity(intent);
                        } else {
                            Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
                            startActivity(intent);
                        }
                    }
                });
                alertbox.setNegativeButton("Close", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                alertbox.show();

            }
40
Kishan Raval

si vous voulez le faire par programme, apparemment ce Q détient la réponse:

Comment activer le lecteur NFC via une API?

Modifier 

il ne contenait pas la réponse, mais il contenait la clé de la réponse, sur laquelle j'ai basé mon code auquel j'ai répondu dans le Q.

Je vais le coller ici aussi au cas où quelqu'un serait intéressé.

Je l'ai obtenu en réfléchissant

Ce code fonctionne sur l'API 15, ne l'a pas encore comparé à d'autres versions

public boolean changeNfcEnabled(Context context, boolean enabled) {
    // Turn NFC on/off
    final boolean desiredState = enabled;
    mNfcAdapter = NfcAdapter.getDefaultAdapter(context);

    if (mNfcAdapter == null) {
        // NFC is not supported
        return false;
    }

    new Thread("toggleNFC") {
        public void run() {
            Log.d(TAG, "Setting NFC enabled state to: " + desiredState);
            boolean success = false;
            Class<?> NfcManagerClass;
            Method setNfcEnabled, setNfcDisabled;
            boolean Nfc;
            if (desiredState) {
                try {
                    NfcManagerClass = Class.forName(mNfcAdapter.getClass().getName());
                    setNfcEnabled   = NfcManagerClass.getDeclaredMethod("enable");
                    setNfcEnabled.setAccessible(true);
                    Nfc             = (Boolean) setNfcEnabled.invoke(mNfcAdapter);
                    success         = Nfc;
                } catch (ClassNotFoundException e) {
                } catch (NoSuchMethodException e) {
                } catch (IllegalArgumentException e) {
                } catch (IllegalAccessException e) {
                } catch (InvocationTargetException e) {
                }
            } else {
                try {
                    NfcManagerClass = Class.forName(mNfcAdapter.getClass().getName());
                    setNfcDisabled  = NfcManagerClass.getDeclaredMethod("disable");
                    setNfcDisabled.setAccessible(true);
                    Nfc             = (Boolean) setNfcDisabled.invoke(mNfcAdapter);
                    success         = Nfc;
                } catch (ClassNotFoundException e) {
                } catch (NoSuchMethodException e) {
                } catch (IllegalArgumentException e) {
                } catch (IllegalAccessException e) {
                } catch (InvocationTargetException e) {
                }
            }
            if (success) {
                Log.d(TAG, "Successfully changed NFC enabled state to "+ desiredState);
            } else {
                Log.w(TAG, "Error setting NFC enabled state to "+ desiredState);
            }
        }
    }.start();
    return false;
}//end method

Cela nécessite cependant 2 autorisations, mettez-les dans le manifeste:

 <!-- change NFC status toggle -->
    <uses-permission Android:name="Android.permission.NFC" />
    <uses-permission Android:name="Android.permission.WRITE_SECURE_SETTINGS" />

L'état du bouton NFC change en conséquence lorsque le code est utilisé. Il n'y a donc aucun problème à le faire manuellement dans le menu de visualisation.


Pour clarifier: Ce code ne fonctionne pas sur les périphériques normaux. Il existe des solutions, mais au moins, il nécessite un root.

8
slinden77

Veuillez cocher cette case ci-dessous. Tout est indiqué étape par étape.

http://ranjithdroid.blogspot.com/2015/11/turn-onoff-Android-nfc-by.html

0

Vous pouvez contrôler les transferts NFC et le reste. Mais pour l'instant l'activer et le désactiver n'est pas possible :(

0
Rejinderi