zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    mysql死锁问题分析
    你应该知道的RPC原理
    如何健壮你的后端服务?
    如何用消息系统避免分布式事务?
    一个故事讲清楚NIO
    地图匹配实践
    利用模拟退火提高Kmeans的聚类精度
    大数据并行计算利器之MPI/OpenMP
    GPU---并行计算利器
    如何设计实现一个地址反解析服务?
  • 原文地址:https://www.cnblogs.com/my334420/p/6915718.html
Copyright © 2011-2022 走看看