NFC技术:使用Android Beam技术传输文本(一)

  1 //实现两部Android手机文本传输
  2 //4.0以上
  3 //方法:将两部安卓手机背对背,一部手机输入文本,点击屏幕发送,另一部接收显示
  4 
  5 public class MainActivity extends Activity implements
  6         CreateNdefMessageCallback, OnNdefPushCompleteCallback {
  7 
  8     private NfcAdapter mnfcAdapter;
  9     private EditText mBeamText;
 10     private PendingIntent mPendingIntent;
 11 
 12     @Override
 13     protected void onCreate(Bundle savedInstanceState) {
 14         super.onCreate(savedInstanceState);
 15         setContentView(R.layout.fragment_main);
 16         mBeamText = (EditText) findViewById(R.id.editText1);
 17         mnfcAdapter = mnfcAdapter.getDefaultAdapter(this);
 18         mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
 19                 getClass()), 0);
 20 
 21         // 指定要传输文本的回调
 22         mnfcAdapter.setNdefPushMessageCallback(this, this);
 23         // 传输完成调用
 24         mnfcAdapter.setOnNdefPushCompleteCallback(this, this);
 25     }
 26 
 27     @Override
 28     protected void onResume() {
 29         // TODO Auto-generated method stub
 30         super.onResume();
 31         if (mnfcAdapter != null) {
 32             mnfcAdapter.enableForegroundDispatch(this, mPendingIntent, null,
 33                     null);
 34         }
 35     }
 36 
 37     @Override
 38     protected void onPause() {
 39         // TODO Auto-generated method stub
 40         super.onPause();
 41         if (mnfcAdapter != null) {
 42             mnfcAdapter.disableForegroundDispatch(this);
 43         }
 44     }
 45 
 46     // 显示接收到的数据
 47     void processIntent(Intent intent) {
 48 
 49         Parcelable[] rawMsgs = intent
 50                 .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
 51         NdefMessage message = (NdefMessage) rawMsgs[0];
 52         String text = TextRecord.parse(message.getRecords()[0]).getText();
 53         Toast.makeText(this, text, 0).show();
 54     }
 55 
 56     @Override
 57     protected void onNewIntent(Intent intent) {
 58         // TODO Auto-generated method stub
 59         // super.onNewIntent(intent);
 60         processIntent(intent);
 61     }
 62 
 63     @Override
 64     public void onNdefPushComplete(NfcEvent event) {
 65         // TODO Auto-generated method stub
 66         Log.i("----->>", "完成");
 67     }
 68 
 69     @Override
 70     public NdefMessage createNdefMessage(NfcEvent event) {
 71         // TODO Auto-generated method stub
 72 
 73         String text = mBeamText.getText().toString().trim();
 74         if ("".equals(text)) {
 75             text = "默认文本";
 76             // 当手机靠近另一部手机,使它自动打开计算器
 77             // NdefMessage ndefMessage = new NdefMessage(
 78             // new NdefRecord[] { NdefRecord
 79             // .createApplicationRecord("com.android.calculator2") });
 80             //
 81 
 82             NdefMessage ndefMessage = new NdefMessage(
 83                     new NdefRecord[] { creatTextRecord(text) });
 84             return ndefMessage;
 85         }
 86 
 87         return null;
 88     }
 89 
 90     public NdefRecord creatTextRecord(String text) {
 91 
 92         byte[] langBytes = Locale.CHINA.getLanguage().getBytes(
 93                 Charset.forName("US-ASCII"));
 94         Charset utfEncoding = Charset.forName("UTF-8");
 95         byte[] textBytes = text.getBytes(utfEncoding);
 96         int utfBit = 0;
 97         char status = (char) (utfBit + langBytes.length);
 98         byte[] data = new byte[1 + langBytes.length + textBytes.length];
 99         data[0] = (byte) status;
100         System.arraycopy(langBytes, 0, data, 1, langBytes.length);
101         System.arraycopy(textBytes, 0, data, 1 + langBytes.length,
102                 textBytes.length);
103 
104         NdefRecord ndefRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
105                 NdefRecord.RTD_TEXT, new byte[0], data);
106         return ndefRecord;
107 
108     }
109 
110 }

 

posted @ 2017-05-28 14:56  张兮兮  阅读(1550)  评论(0编辑  收藏  举报