Android: modification des paramètres NFC (Marche/Arrêt) par programmation
j'ai essayer de changer NFC paramètres (on/off) par programmation sur Android 2.3.3.
au téléphone, sous la rubrique "Paramètres réseau et sans fil",
vous pouvez choisir de définir si vous voulez utiliser NFC pour lire et échanger des tags ou non.
donc je voudrais basculer ce réglage dans mon application.
Mais je n'arrive pas à trouver une api pour cela.
je cherche un code qui ressemblerait probablement à ceci:
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled( on/off );
5 réponses
vous ne pouvez pas tourner on/off
manuellement, mais vous pouvez envoyer l'utilisateur aux préférences si elle est 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));
}
Méthode getNfc()
renvoie simplement le nfcadapter
:
nfc = NfcAdapter.getDefaultAdapter (activité.getApplicationContext ());
ce n'est pas possible de façon programmatique sans dispositif d'enracinement.
Mais vous pouvez commencer NFC Settings Activity
par l'action d'intention Settings.ACTION_NFC_SETTINGS
pour le niveau api 16 et au-dessus. Pour l'api < 16 utiliser Settings.ACTION_WIRELESS_SETTINGS
la réponse précédente suggère d'utiliser WIFI_SETTINGS
mais nous pouvons passer directement à NFC_SETTINGS
Voici l'exemple:
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();
}
si vous voulez le faire programmatiquement, apparemment ce Q tient la réponse:
comment activer NFC reader via API?
Modifier
il ne tient pas la réponse, mais la clé de la réponse, sur lequel j'ai basé mon code j'ai répondu dans le Q.
je vais le coller ici aussi au cas où quelqu'un serait intéressé.
j'ai il travaille par la réflexion
ce code fonctionne sur API 15, ne l'ont pas encore vérifié par rapport à d'autres verions
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
cela nécessite 2 permissions cependant, mettez-les dans le manifeste:
<!-- change NFC status toggle -->
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
l'état du bouton NFC change en conséquence lorsque le code est utilisé, il n'y a donc aucun problème lorsque vous le faites manuellement dans le menu seetings.
pour clarifier : ce code ne fonctionne pas sur les appareils normaux. Il y a des solutions, mais au moins cela nécessite la racine .
vous pouvez contrôler les transferts NFC et autres. Mais pour l'instant, l'activer et le désactiver n'est pas possible :(
veuillez vérifier cette URL ci-dessous tout est indiqué pas à pas.
http://ranjithdroid.blogspot.com/2015/11/turn-onoff-android-nfc-by.html