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 }
分类:
Android NFC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?