29

Android 2.3.3 で NFC 設定 (オン/オフ) をプログラムで変更しようとしています。

電話の「ワイヤレスとネットワークの設定」で、
タグの読み取りと交換に NFC を使用するかどうかを選択できます。

したがって、アプリケーションでこの設定を切り替えたいと思います。
しかし、私はこれのためのAPIを見つけることができないようです.

おそらく次のようなコードを探しています。

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

5 に答える 5

34

手動で変更することはできませんon/offが、次の場合はユーザーを設定に送信できます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));
    }

メソッドは以下getNfc()を返しますnfcadapter:

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

于 2011-05-11T08:27:40.303 に答える
9

プログラムで実行したい場合は、どうやらこの Q が答えを保持しています:

API 経由で NFC リーダーを有効にするにはどうすればよいですか?

編集

それは答えを保持していませんでしたが、答えへの鍵を保持していました。これに基づいて、Q.

誰かが興味を持っている場合に備えて、ここにも貼り付けます。

私は反射を通してそれを働かせました

このコードは API 15 で動作しますが、他のバージョンに対してはまだチェックしていません

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

ただし、これには 2 つのアクセス許可が必要です。それらをマニフェストに入れます。

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

NFC ボタンの状態は、コードが使用されたときにそれに応じて切り替わるため、設定メニューで手動で行っても問題はありません。


明確にするためにこのコードは通常のデバイスでは機能しません。回避策はありますが、少なくとも root が必要です。

于 2012-06-25T18:50:27.643 に答える
-1

NFC転送などを制御できます。しかし、今のところオンとオフを切り替えることはできません:(

于 2011-05-10T04:27:03.607 に答える
-1

以下の URL を確認してください。すべてが段階的に示されています。

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

于 2015-11-04T08:15:28.077 に答える