NFC(13)使用Android Beam技术传输文件

注意 

  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 }
复制代码

 



posted @   f9q  阅读(1489)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示