代码之家  ›  专栏  ›  技术社区  ›  Hans En

如何通过NFC发送URL?

  •  0
  • Hans En  · 技术社区  · 12 年前

    我花了很多时间试图在三星galaxy s3和nexus s之间发送url,但没有成功。我已经多次阅读API。我已经尝试过使用复制粘贴发送带有Ndef消息的字符串的示例,但没有成功。它们运行的是不同的Android版本,所以它们是否使用相同的协议?我的目标是API版本16及以上。我的代码:

    public class MainActivity extends Activity {
        NfcAdapter mNfcAdapter;
        NdefMessage mNdefMessage;
        TextView textView;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             textView = (TextView) findViewById(R.id.textView);
            // Check for available NFC Adapter
             mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
             NdefRecord uriRecord = NdefRecord.createUri(Uri.encode("http://www.google.com/"));
             mNdefMessage = new NdefMessage(new NdefRecord[] { uriRecord });
             mNfcAdapter.setNdefPushMessage(mNdefMessage, this, this);
    
    //         mNfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback()
    //         {
    //             /*
    //              * (non-Javadoc)
    //              * @see android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage(android.nfc.NfcEvent)
    //              */
    //             @Override
    //             public NdefMessage createNdefMessage(NfcEvent event) 
    //             {
    //               Toast.makeText(getApplicationContext(), "CREATING MESSAGE", Toast.LENGTH_LONG).show();
    //                 NdefRecord uriRecord = NdefRecord.createUri(Uri.encode("http://www.google.com/"));
    //                 return new NdefMessage(new NdefRecord[] { uriRecord });
    //             }
    //
    //         }, this, this); 
        }
    }
    

    我已经尝试过使用回调和不使用回调。两种方法都不起作用。另一部手机根本没有反应。我希望它能打开带有主页的浏览器。有什么想法吗?非常感谢你!

    1 回复  |  直到 12 年前
        1
  •  0
  •   flx    12 年前

    这是对我有用的代码:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // ..
        // only try to set up NFC on API10+
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1) {
            // Check for available NFC Adapter
            NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
            if (nfcAdapter != null) {
                nfcAdapter.setNdefPushMessage(
                        new NdefMessage(NdefRecord.createUri(Uri.encode("http://www.google.com/"))),
                        this);
            }
        }
    }
    

    请注意,它仅在API10+上运行,并且仅在NFC可用时运行。