NFC設定(オン/オフ)をプログラムで変更しようとしていますAndroid 2.3.3。
電話の[ワイヤレスとネットワークの設定]で、
NFCを使用してタグの読み取りと交換を行うかどうかを設定できます。
アプリケーションでこの設定を切り替えたいのですが。
しかし、これのためのAPIを見つけることができないようです。
私はおそらく次のようなコードを探しています:
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled( on/off );
手動で_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());
ルート権限を取得しているデバイスがなければ、プログラム的には不可能です。ただし、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();
}
プログラムで実行したい場合は、このQが答えを保持しているようです。
編集
それは答えを保持していませんでしたが、それは私が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が必要です。
以下のURLをすべてチェックして、すべてが段階的に示されています。
http://ranjithdroid.blogspot.com/2015/11/turn-onoff-Android-nfc-by.html
NFC転送およびその他のものを制御できます。しかし、現在のところ、オンとオフを切り替えることはできません:(