I'm using a tutorial source - without changing it at all - and it won't read an NFC Tag.
When I scan a tag - it does nothing.
It is SUPPOSED to read an NFC Tag written as: WIFINETWORKNAME,password
^ - I think - the tutorial states "write network name and password (separate by comma) into the tag" and I've tried it 3 different ways - nothing works.
Nor does it create a new wireless profile - no matter what I do.
<a href="http://schoolofcode.wordpress.com/2013/03/20/connect-to-wifi-using-android-nfc-phone-and-nfc-tag/" rel="nofollow">http://schoolofcode.wordpress.com/2013/03/20/connect-to-wifi-using-android-nfc-phone-and-nfc-tag/</a>
What it does do:
Launch when I scan an NFC tag (If I write the AAR to the tag)
What it does not do:
<ul>
<li>Create any new wireless profiles</li>
<li>Read the NFC tag and/or connect it properly</li>
</ul>
What I've tried to do:
Write then read the NFC tag as:
WIFINETWORKNAME,password
WIFINETWORKNAME, password
WIFINETWORKNAME , password
JAVA:
I'm getting the following in my LogCat when attempting to execute it:
When I scan a tag - it does nothing.
It is SUPPOSED to read an NFC Tag written as: WIFINETWORKNAME,password
^ - I think - the tutorial states "write network name and password (separate by comma) into the tag" and I've tried it 3 different ways - nothing works.
Nor does it create a new wireless profile - no matter what I do.
<a href="http://schoolofcode.wordpress.com/2013/03/20/connect-to-wifi-using-android-nfc-phone-and-nfc-tag/" rel="nofollow">http://schoolofcode.wordpress.com/2013/03/20/connect-to-wifi-using-android-nfc-phone-and-nfc-tag/</a>
What it does do:
Launch when I scan an NFC tag (If I write the AAR to the tag)
What it does not do:
<ul>
<li>Create any new wireless profiles</li>
<li>Read the NFC tag and/or connect it properly</li>
</ul>
What I've tried to do:
Write then read the NFC tag as:
WIFINETWORKNAME,password
WIFINETWORKNAME, password
WIFINETWORKNAME , password
JAVA:
Code:
import java.util.List;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.nfc.NdefMessage;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.os.Parcelable;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Connect2 extends Activity {
private EditText wifiname;
private String password;
private NfcAdapter mAdapter;
private PendingIntent mPendingIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.connect2);
mAdapter = NfcAdapter.getDefaultAdapter(this);
// Create a generic PendingIntent that will be deliver to this activity.
// The NFC stack
// will fill in the intent with the details of the discovered tag before
// delivering to
// this activity.
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// Setup an intent filter for all MIME based dispatches
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
WifiManager wifiMgr = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
String connectionName = wifiInfo.getSSID();
TextView tv=(TextView)findViewById(R.id.wifiname);
if(connectionName==null){
tv.setText("You are not connected ");
}else{
tv.setText("You are linked to: "+connectionName+" ");
}
Button close=(Button)findViewById(R.id.close);
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
System.exit(0);
}
});
}
@Override
public void onResume(){
super.onResume();
if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())||NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){
processReadIntent(getIntent());
}
}
@Override
public void onNewIntent(Intent intent){
setIntent(intent);
}
public void processReadIntent(Intent intent){
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
NfcAdapter.EXTRA_NDEF_MESSAGES);
// only one message sent during the beam
NdefMessage msg = (NdefMessage) rawMsgs[0];
// record 0 contains the MIME type, record 1 is the AAR, if present
Log.d("msg", msg.getRecords()[0].getPayload().toString());
byte[]payload=msg.getRecords()[0].getPayload();
String msgtext=null;
try{
//Get the Text Encoding
String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
//Get the Language Code
int languageCodeLength = payload[0] & 0077;
String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
//Get the Text
msgtext = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
}catch(Exception e){
}
// splitting the message by comma. The first part is the name and 2nd part is the password.
String[]tagdata=msgtext.split(",");
String networkSSID = tagdata[0].toString();
String networkPass = tagdata[1].toString();
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\""; // Please note the quotes. String should contain ssid in quotes
conf.preSharedKey = "\""+ networkPass +"\"";
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
wifiManager.disconnect();
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
break;
}
}
TextView wifiname=(TextView)findViewById(R.id.wifiname);
wifiname.setTextColor( getResources().getColor(R.color.solid_red) );
wifiname.setText("Successfully linked "+networkSSID +" ");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
I'm getting the following in my LogCat when attempting to execute it:
Code:
04-05 13:08:37.107: D/NfcDispatcher(905): dispatch tag: TAG: Tech [android.nfc.tech.MifareUltralight, android.nfc.tech.NfcA, android.nfc.tech.Ndef] message: NdefMessage [NdefRecord tnf=1 type=54 payload=02656E414E4452452D50435F4E4554574F524B2C2070617373776F7264]
04-05 13:08:37.107: D/NfcHandover(905): tryHandover(): NdefMessage [NdefRecord tnf=1 type=54 payload=02656E414E4452452D50435F4E4554574F524B2C2070617373776F7264]
04-05 13:08:37.117: I/ActivityManager(478): START u0 {flg=0x10008000 cmp=com.android.nfc/.NfcRootActivity (has extras)} from pid 905
04-05 13:08:37.137: I/NfcDispatcher(905): matched multiple TECH
04-05 13:08:37.147: I/ActivityManager(478): START u0 {cmp=com.android.nfc/.TechListChooserActivity (has extras)} from pid 905
04-05 13:08:37.317: D/dalvikvm(905): GC_CONCURRENT freed 7783K, 22% free 15072K/19148K, paused 9ms+9ms, total 52ms
04-05 13:08:37.327: I/ActivityManager(478): Displayed com.android.nfc/.TechListChooserActivity: +185ms (total +196ms)
04-05 13:08:38.247: D/NativeNfcTag(905): Tag lost, restarting polling loop