Android Nfc Beam数据传输

2023-05-16

   从NfcAdapter的官方文档我们可以得知,Android Beam技术可以实现简单的信息的传输,同样支持文件的传输。

                                                                 简单消息的传输

  一、简单信息的传输API:

    1、enableForegroundNdefPush(Activity activity, NdefMessage message)

    2、setNdefPushMessage (NdefMessage message, Activity activity, Activity... activities)

    3、setNdefPushMessageCallback (NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities)

   二、三者之间的区别:

     1:方法一是API 10以后使用,方法二、三都是API 14以后才可以用;

     2:方法二用于传输不可变的数据,而方法三多用于传输可变的数据;

   三、应用:

                                                                             方法一的应用

public class MainActivity extends AppCompatActivity{
    private NfcAdapter nfcAdapter;
    private PendingIntent pendingIntent;
    private IntentFilter[] filters;
    private String[][] techLists=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkNdef();
    }

    private void checkNdef() {
        nfcAdapter=NfcAdapter.getDefaultAdapter(this);
        pendingIntent=PendingIntent.getActivity(MainActivity.this, 500, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            filter.addDataType("*/*");
            filters=new IntentFilter[]{filter};
        } catch (IntentFilter.MalformedMimeTypeException e) {
            e.printStackTrace();
        }
        if (nfcAdapter==null){
            Toast.makeText(this,"不支持NFC功能",Toast.LENGTH_SHORT).show();
        }else{
            if (nfcAdapter.isEnabled()){
                Toast.makeText(this,"NFC功能已打开",Toast.LENGTH_SHORT).show();
            }else{
                Intent intent= new Intent(Settings.ACTION_NFC_SETTINGS);
                startActivity(intent);
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        //前台调度系统
        nfcAdapter.enableForegroundDispatch(MainActivity.this,pendingIntent,filters,techLists);
        //enableForegroundNdefPush(Activity activity, NdefMessage message)的使用
        NdefMessage ndefMessage=NfcWriteUtil.writeAbsoluteUri("http://www.baidu.com");
        nfcAdapter.enableForegroundNdefPush(this,ndefMessage);
    }

    @Override
    protected void onPause() {
        super.onPause();
        nfcAdapter.disableForegroundDispatch(MainActivity.this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Tag tag=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    }
}

                                                                           方法二的应用

//第一步,实现callBack
public class NfcP2pActivity extends AppCompatActivity implements NfcAdapter.CreateNdefMessageCallback{
   private NfcAdapter nfcAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc_p2p);
        checkNfcBeam();
        //第二步,绑定callBack
        nfcAdapter.setNdefPushMessageCallback(this,this);
    }

    private void checkNfcBeam() {
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        if (nfcAdapter !=null){
            if (!nfcAdapter.isEnabled()){
               //支持NFC,但是没有打开
                Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
                startActivity(intent);
            }else if(!nfcAdapter.isNdefPushEnabled()){
                //API 16+
                Intent intent = new Intent(Settings.ACTION_NFCSHARING_SETTINGS);
                startActivity(intent);
            }
        }
    }

    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        //封装数据,即写数据,发送数据
        NdefMessage ndefMessage=NfcWriteUtil.writeText("我是测试", Locale.CANADA,true);
        return ndefMessage;
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //接收数据
        setIntent(intent);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //判断数据是否为想要的
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){
            //解析数据(读数据)
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}
                                                                              方法三的应用

public class NfcP2p2Activity extends AppCompatActivity {
   private NfcAdapter nfcAdapter;
    private NdefMessage ndefMessage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc_p2p);
        checkNfcBeam();
        nfcAdapter.setNdefPushMessage(ndefMessage,this);
    }

    private void checkNfcBeam() {
        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        if (nfcAdapter !=null){
            if (!nfcAdapter.isEnabled()){
               //支持NFC,但是没有打开
                Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
                startActivity(intent);
            }else if(!nfcAdapter.isNdefPushEnabled()){
                //API 16+
                Intent intent = new Intent(Settings.ACTION_NFCSHARING_SETTINGS);
                startActivity(intent);
            }
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //接收数据
        setIntent(intent);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //判断数据是否为想要的
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){
            //解析数据(读数据)
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}
                                                                            文件传输

一、API:

   1、setBeamPushUris(Uri[] uris, Activity activity)

   2、setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback callback, Activity activity)

二、应用:

    

public class NFCFileActivity extends Activity implements CreateBeamUrisCallback {
	private NfcAdapter mNfcAdapter;
	private PendingIntent mPendingIntent;
	private final String targetFilename = "/sdcard/temp_icon.png";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_nfcfile);
		mNfcAdapter = mNfcAdapter.getDefaultAdapter(this);
		mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
				getClass()), 0);

		try {
			InputStream is = getResources().getAssets().open("icon.png");
			FileOutputStream fos = new FileOutputStream(targetFilename);
			byte[] buffer = new byte[10000];
			int n = is.read(buffer);
			fos.write(buffer, 0, n);
			fos.close();
			is.close();
		} catch (Exception e) {

		}

		mNfcAdapter.setBeamPushUrisCallback(this, this);

	}

	@Override
	public Uri[] createBeamUris(NfcEvent event) {
		Uri[] uris = new Uri[1];
		Uri uri = Uri.parse("file://" + targetFilename);
		uris[0] = uri;
		return uris;
	}

}

     




     

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Nfc Beam数据传输 的相关文章

  • 使用新语法应用 Android Gradle 插件

    如何使用新的 Gradle 插件语法应用 Android 插件 plugins id version 代替 buildscript dependencies classpath com android tools build gradle
  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 需要使用手机后退按钮返回 Web 视图的帮助

    这是我的代码 package com testappmobile import android app Activity import android os Bundle import android view KeyEvent impor
  • 如何在 Android TextView 中使用土耳其语字符,如“ş ç ı ö”?

    我想在 android TextView 中写入 ile 但它没有正确绘制 怎样才能使用这样的字符呢 例如 我将文本视图设置为 ile 它显示为 ile 我怎样才能解决这个问题 尝试以下方法 看看是否有帮助 source http grou
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • 不变违规:requireNativeComponent:在 UIManager 中找不到“RNSVGSvgViewAndroid”

    我对标题中提到的错误感到头疼 我正在使用react native gifted charts https www npmjs com package react native gifted charts v 1 0 3 https www
  • 具有自定义源集的 Android Gradle 风格 - gradle 文件应该是什么样子?

    我有一个旧的 eclipse 项目 我已经转移到 android studio 并设置为使用flavor 它似乎工作得很好 直到我开始尝试在我的风格之间使用不同的 java 文件 我的项目设置是这样的 ProjectRoot acitonb
  • 如何向开发人员发送崩溃报告?

    我开发 Android 应用程序 但在某些情况下我的应用程序force close 如果出现以下情况 我如何向开发人员发送包含详细信息的电子邮件force close随时发生 The ACRA https github com ACRA a
  • Android Fragment onCreateView 与手势

    我正在尝试在片段中使用手势 我在 FragmentActivity 中有以下内容来处理我的详细信息片段 我试图发生的情况是 当在视图上检测到滑动时 将该视图内的数据替换为上一个或下一个条目 如果有更好的方法来处理这个问题 我完全同意 然而
  • 像 WhatsApp 一样发送图片

    我做了一个聊天应用程序 我想添加照片 文件共享我的应用程序中的概念与 WhatsApp 相同 我已经使用该应用程序制作了Xmpp Openfire目前我正在使用此功能进行照片共享 但它并不完全可靠 public void sendFile
  • 具有代理设置的 Android 模拟器 - 致命错误:.//android/base/sockets/ 检查失败:isValidFd(fd)。 FD 1404 最大1024

    需要使用代理设置运行模拟器 我在命令提示符中使用以下命令来启动模拟器 emulator avd AVD for 3 7 WVGA Nexus One http proxy http username password IP Port 如果没
  • 适用于 Android 的 Google 云端硬盘\文档 API

    我在几个小时内将 Dropbox 与我的应用程序集成 因为 SDK 描述清晰并且有很好的使用示例 Google Drive 似乎只有一个 一刀切 的 Gdata SDK 它非常重 有很多依赖项 它使我的应用程序的大小增加了三倍 而且不是很直
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • Android AdMob:addView 在返回活动之前不会显示广告

    我正在尝试在游戏顶部添加横幅广告 我的活动使用带有自定义 SurfaceView 的relativelayout 我希望广告与 SurfaceView 重叠 广告会加载并可点击 但不会绘制到屏幕上 当我离开活动并返回时 会绘制广告 例如 通
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做
  • R.java是手动修改的!恢复到生成的版本

    我在布局中添加了一个 xml 文件 之后这个错误就来了 但问题是我还没有接触过 R java 文件 现在 在我的新活动中 我要将其内容视图设置为我新创建的 xml 文件 但是当我执行 R layout 时 新创建的 xml 不会出现在建议中
  • 我应该如何在 Android 上使用 Retrofit 处理“无互联网连接”

    我想处理没有互联网连接的情况 通常我会运行 ConnectivityManager cm ConnectivityManager context getSystemService Context CONNECTIVITY SERVICE N

随机推荐

  • 深入理解Java中的String

    深入理解Java中的String 本篇转载自博客园 xff0c 原作者平凡希 xff0c 特此说明
  • 反爬虫

    反爬虫
  • 设计模式——生产消费者模式

    设计模式 生产消费者模式 生产者消费者问题是线程模型中的经典问题 xff1a 生产者和消费者在同一时间段内共用同一存储空间 xff0c 生产者向空间里生产数据 xff0c 而消费者取走数据 像图片下载加载的模型就可以参考这个模型 UML图
  • win10如何修改mac地址(亲测通过)

    1 查看现有的mac地址 步骤 xff1a 打开cmd界面 xff0c 输入ipconfig all按回车 如下图 xff0c 箭头所指即为当前mac地址 2 屏幕右下角右键点击网络图标 xff0c 见下图 打开网络和共享中心 xff0c
  • eclipse怎么恢复默认界面

    Eclipse里面将界面恢复到默认状态 xff1a 1 选择Eclipse的工具栏里面的 窗口 xff08 Window xff09 xff0c xff08 Window Perspective Reset Perspective xff0
  • fatal: Authentication failed could not read from remote repository

    Git 无法clone pull fetch 异常 xff1a fatal could span class hljs operator not span span class hljs built in read span span cl
  • Mybatis Plus 自定义方法实现分页

    一般物理分页 xff0c 即通过sql语句分页 xff0c 都是在sql语句后面添加limit分页语句 xff0c 在xml文件里传入分页的参数 xff0c 再多配置一条sql xff0c 用于查询总数 xff1a lt select id
  • mac远程桌面Microsoft Remote Desktop for Mac - Mac-连接Windows远程桌面

    好记星不如烂笔头 xff0c 这里记录平时工作中用到的东西 xff0c 不喜可以留言 1 xff1a 在mac电脑远程桌面可以使用 xff0c Microsoft 远程桌面 使用 Microsoft Remote Desktop 这个还是很
  • 安装gentoo的点点滴滴(三)

    1 每次启动电脑都不能启动swap分区 xff0c 都要用swapon dev sdb3来激活交换分区 再去看gentoo的安装手册 xff0c 原来是 etc fstab没有编辑好 xff0c 使用其自动生成的有问题 现在将自己修改的贴上
  • keil5 串口打印的实现

    目的 xff1a 在keil5中实现串口打印 xff0c debug信号 方法 xff1a 首先安装串口调试工具 添加 include lt stdio h gt 重定向fputc函数 xff1a int fputc int ch FILE
  • 在Ubuntu中使用apt-get的时候,始终显示“E:无法定位软件包”

    可能的一个原因是因为安装过后没有更新软件源 xff0c 试试用 sudo apt get update 命令更新一下软件源
  • Linux安装nginx启动时出错:error while loading shared libraries: libpcre.so.0: cannot open shared object file

    启动linux的时候出现 xff1a error while loading shared libraries libpcre so 0 cannot open shared object file 解决方法 xff1a 1 cd lib6
  • Ubuntu 安装Chrome

    去官网下载安装包 google chrome stable current amd64 deb 地址 https www google com intl zh CN chrome browser sudo dpkg i google chr
  • redis集群搭建过程中踩过的几个坑

    这两天在玩redis的集群 xff0c 搭建过程中遇到了以下几个问题 首先是redis ERR Not all 16384 slots are covered by nodes 不是所有的slot都被分配了 xff0c 可以考虑使用redi
  • 业务分析系列主题:业务场景

    本文介绍了了业务场景的概念 要素以及创建方法 xff0c 与大家分享 xff01 业务场景作为一种需求分析技术用途十分广泛 本文涛哥就和大家聊聊业务场景是什么 xff0c 以及如何创建业务场景 一 业务场景是什么 xff1f 所谓 场景 x
  • 业务分析主题系列:常见的业务场景

    常见的业务场景 场景1 xff1a 数据涨跌异常如何处理 xff1f 场景2 xff1a 如何评估渠道质量 xff0c 确定投放优先级 xff1f 场景3 xff1a 一个功能 内容上线后 xff0c 如何评估其价值 xff1f 场景4 x
  • docker、firewalld和iptables之间的关系

    要注意docker命令中使用 p 暴露端口时 xff0c 实现需要依赖iptables CentOS 7默认使用的是firewalld 但是是否需要关闭firewalld并启动iptables呢 xff1f 参考多篇博文 xff0c 答案应
  • UBUNTU停留在登录界面一直循环但进不去的原因

    如标题所述 xff0c 这种情况一是动了 etc profile或者 etc environment文件 xff0c 改了里面的环境变量 xff0c 一是 Xauthority文件的所有权变成了root xff0c 导致普通用户无法进入桌面
  • VMWare中的Ubuntu磁盘大小扩展

    虚拟机一般情况下我们会分配大约20G左右的磁盘空间大小 xff0c 但是在使用的过程中 xff0c 比如此次在编译android源码所占磁盘空间较大的包的时候 xff0c 往往发现虚拟机的磁盘空间大小不够用了 xff0c 这个时候就需要我们
  • Android Nfc Beam数据传输

    从NfcAdapter的官方文档我们可以得知 xff0c Android Beam技术可以实现简单的信息的传输 xff0c 同样支持文件的传输 简单消息的传输 一 简单信息的传输API xff1a 1 enableForegroundNde