我尝试在Android 2.3.3上以编程方式更改NFC设置(开/关)。
在手机上,在“无线和网络设置”下,
您可以选择设置是否要使用NFC来读取和交换标签。
所以我想在我的申请中切换这个设置 但我似乎无法为此找到一个api。
我正在寻找一些可能看起来像这样的代码:
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled( on/off );
答案 0 :(得分:41)
如果没有root设备,就不可能以编程方式进行编程。
但您可以通过意图操作NFC Settings Activity
为api 16级及更高级别启动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();
}
答案 1 :(得分:31)
您无法手动转换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());
答案 2 :(得分:8)
如果你想以编程方式做到这一点,那么这个Q肯定会得到答案:
How can I enable NFC reader via API?
修改
它没有得到答案,但它掌握了答案的关键,我根据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 。
答案 3 :(得分:0)
您可以控制NFC传输和内容。但是现在打开和关闭它是不可能的:(
答案 4 :(得分:-1)
请检查以下网址所有内容都是按步骤提供的。
http://ranjithdroid.blogspot.com/2015/11/turn-onoff-android-nfc-by.html