注意
Android Beam技术传输文件时nfc只负责连接两个手机,而传输文件实际是用蓝牙模块.且目前接收文件功能只是系统完成,不用自写个接收程序.
传输文件相关的重要api
从Android4.1开始,NfcAdapter类增加了如下两个推送数据的方法。
NfcAdapter.setBeamPushUris 要把file转成uri
public void setBeamPushUris(Uri[] uris, Activity activity);
NfcAdapter.setBeamPushUrisCallback 也是回调型,
public void setBeamPushUrisCallback(CreateBeamUrisCallback callback, Activity activity);
示例
1 import java.io.FileOutputStream;
2 import java.io.InputStream;
3
4 import android.app.Activity;
5 import android.app.PendingIntent;
6 import android.content.Intent;
7 import android.net.Uri;
8 import android.nfc.NfcAdapter;
9 import android.nfc.NfcAdapter.CreateBeamUrisCallback;
10 import android.nfc.NfcEvent;
11 import android.os.Bundle;
12
13 public class NFCFileActivity extends Activity implements CreateBeamUrisCallback {
14 private NfcAdapter mNfcAdapter;
15 private PendingIntent mPendingIntent;
16 private final String targetFilename = "/sdcard/temp_icon.png";
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_nfcfile);
22 /*
23 * 下面两个调用将当前aty设为处理Nfc的应用
24 */
25 mNfcAdapter = mNfcAdapter.getDefaultAdapter(this);
26 mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
27 getClass()), 0);
28 try {
29 /*
30 * 下面代码是将assets中文件拷贝到"/sdcard/temp_icon.png"
31 * 两个nfc设备就是传输的文件就是这张图片
32 */
33 InputStream is = getResources().getAssets().open("icon.png");
34 FileOutputStream fos = new FileOutputStream(targetFilename);
35 byte[] buffer = new byte[10000];
36 int n = is.read(buffer);
37 fos.write(buffer, 0, n);
38 fos.close();
39 is.close();
40 } catch (Exception e) {
41
42 }
43 /*
44 * 注意,本示例是用 实现CreateBeamUrisCallback接口方法传输数据,注意
45 */
46 mNfcAdapter.setBeamPushUrisCallback(this, this);
47 }
48
49 /*
50 * CreateBeamUrisCallback接口的回调函数 创建uri数组 uri数组中就是要传输的所有文件
51 */
52 @Override
53 public Uri[] createBeamUris(NfcEvent event) {
54 // 第1步,准备uri数组,本例中只传一个文件,所以大小为1,uri数组中就是要传输的所有文件
55 Uri[] uris = new Uri[1];
56 // 第2步,根据要传输的文件的名字,构造一个file://类型的uri
57 Uri uri = Uri.parse("file://" + targetFilename);
58 // 第3步,赋值uri数组的各元素.
59 uris[0] = uri;
60
61 return uris;
62 }
63 }
转载于:https://www.cnblogs.com/sjjg/p/4786439.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)