Android: modification des paramètres NFC (Marche/Arrêt) par programmation

j'ai essayer de changer NFC paramètres (on/off) par programmation sur Android 2.3.3.

au téléphone, sous la rubrique "Paramètres réseau et sans fil",

vous pouvez choisir de définir si vous voulez utiliser NFC pour lire et échanger des tags ou non.

donc je voudrais basculer ce réglage dans mon application.

Mais je n'arrive pas à trouver une api pour cela.

je cherche un code qui ressemblerait probablement à ceci:

WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled( on/off );
21
demandé sur OMG Ponies 2011-05-10 08:14:16

5 réponses

vous ne pouvez pas tourner on/off manuellement, mais vous pouvez envoyer l'utilisateur aux préférences si elle est 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));
    }

Méthode getNfc() renvoie simplement le nfcadapter :

nfc = NfcAdapter.getDefaultAdapter (activité.getApplicationContext ());

29
répondu Sven Haiges 2014-03-21 12:55:39

ce n'est pas possible de façon programmatique sans dispositif d'enracinement. Mais vous pouvez commencer NFC Settings Activity par l'action d'intention Settings.ACTION_NFC_SETTINGS pour le niveau api 16 et au-dessus. Pour l'api < 16 utiliser Settings.ACTION_WIRELESS_SETTINGS

la réponse précédente 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();

            }
37
répondu Kishan Raval 2014-03-21 13:25:43

si vous voulez le faire programmatiquement, apparemment ce Q tient la réponse:

comment activer NFC reader via API?

Modifier

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

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

j'ai il travaille par la réflexion

ce code fonctionne sur API 15, ne l'ont pas encore vérifié par rapport à d'autres verions

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 2 permissions cependant, 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 lorsque vous le faites manuellement dans le menu seetings.


pour clarifier : ce code ne fonctionne pas sur les appareils normaux. Il y a des solutions, mais au moins cela nécessite la racine .

8
répondu slinden77 2017-05-23 11:54:56

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

0
répondu Rejinderi 2011-05-10 04:27:03

veuillez vérifier cette URL ci-dessous tout est indiqué pas à pas.

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

0
répondu Ranjith Subramaniam 2015-11-04 08:15:28