it-swarm.com.de

Android: Ändern NFC Einstellungen (ein/aus) programmgesteuert

Ich versuche, die Einstellungen für NFC unter Android 2.3.3 programmgesteuert zu ändern (Ein/Aus).

Am Telefon unter "Wireless & Netzwerkeinstellungen"
Sie können festlegen, ob Sie mit NFC Tags lesen und austauschen möchten oder nicht.

Daher möchte ich diese Einstellung in meiner Anwendung ändern.
.__Ich kann aber scheinbar keine API dafür finden.

Ich suche nach Code, der wahrscheinlich so aussehen würde: 

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

Sie können on/off nicht manuell einstellen, aber Sie können den Benutzer zu den Voreinstellungen senden, wenn es off ist:

    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));
    }

Die Methode getNfc() gibt nur die nfcadapter zurück:

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

31
Sven Haiges

Es ist nicht programmgesteuert ohne gerootetes Gerät möglich. Sie können NFC Settings Activity jedoch mit der beabsichtigten Aktion Settings.ACTION_NFC_SETTINGS für Stufe 16 und höher starten. Für API <16 verwenden Sie Settings.ACTION_WIRELESS_SETTINGS 

Die zuvor ausgewählte Antwort schlägt die Verwendung von WIFI_SETTINGS vor, wir können jedoch direkt zu NFC_SETTINGS wechseln.

Hier ist das Beispiel:

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

wenn Sie es programmgesteuert machen wollen, enthält dieses Q offensichtlich die Antwort:

Wie kann ich den NFC - Reader über die API aktivieren?

Bearbeiten 

die Antwort enthielt nicht die Antwort, aber sie enthielt den Schlüssel zu der Antwort, auf der ich meinen Code basiert, mit dem ich im Q geantwortet habe.

Ich werde es hier auch einfügen, falls jemand interessiert ist.

Ich habe es durch Nachdenken bekommen

Dieser Code funktioniert mit API 15 und wurde noch nicht mit anderen Versionen verglichen

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

Dies erfordert jedoch 2 Berechtigungen, fügen Sie sie in das Manifest ein:

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

Der Status der Taste NFC wechselt entsprechend, wenn der Code verwendet wird. Es gibt also keine Probleme, wenn Sie ihn manuell im Besetzungsmenü ausführen.


Zur Klarstellung von: Dieser Code funktioniert nicht auf normalen Geräten. Es gibt einige Möglichkeiten, aber zumindest root ist erforderlich.

8
slinden77

Bitte überprüfen Sie diese URL unter Schritt für Schritt.

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

0

Sie können die NFC -Transfers und -Daten steuern. Das Ein- und Ausschalten ist vorerst nicht möglich :(

0
Rejinderi