web-dev-qa-db-ja.com

Android:NFC設定(オン/オフ)をプログラムで変更)

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

電話の[ワイヤレスとネットワークの設定]で、
NFCを使用してタグの読み取りと交換を行うかどうかを設定できます。

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

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

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

手動で_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());

33
Sven Haiges

ルート権限を取得しているデバイスがなければ、プログラム的には不可能です。ただし、APIレベル16以上のインテントアクションNFC Settings Activityを使用してSettings.ACTION_NFC_SETTINGSを開始できます。 API <16の場合はSettings.ACTION_WIRELESS_SETTINGSを使用します

以前に選択した回答はWIFI_SETTINGSの使用を提案していますが、NFC_SETTINGSに直接移動できます

次に例を示します。

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

            }
44
Kishan Raval

プログラムで実行したい場合は、このQが答えを保持しているようです。

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ボタンの状態は、コードを使用するとそれに応じて切り替わるので、seetingsメニューで手動で実行しても問題はありません。


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

8
slinden77

以下のURLをすべてチェックして、すべてが段階的に示されています。

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

0

NFC転送およびその他のものを制御できます。しかし、現在のところ、オンとオフを切り替えることはできません:(

0
Rejinderi