免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5791 | 回复: 1
打印 上一主题 下一主题

使用NFC分享 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-05 13:24 |只看该作者 |倒序浏览
来源官网,总结用.
指定NFC功能
  1. /**通过添加<uses-feature>标签作为一个<manifest>标签的子标签,指定我们的应用程序使用NFC。
  2. 设置android:required属性字段为true,使得我们的应用程序只有在NFC可以使用时才能运行。

  3. 下面的代码展示了如何指定<uses-feature>标签:*/

  4. <uses-feature
  5.     android:name="android.hardware.nfc"
  6.     android:required="true" />
  7. /**注意,如果应用程序将NFC作为一个可选的功能,期望在NFC不可使用时程序还能继续执行,
  8. 我们就应该将android:required属性字段设为false,然后在代码中测试NFC的可用性。*/
复制代码
测试设备是否支持Android Beam文件传输
  1. //应使用以下标签使得在Manifest清单文件中指定NFC是可选的:

  2. <uses-feature android:name="android.hardware.nfc" android:required="false" />

  3. /**如果设置了android:required="false",则我们必须在代码中测试设备是否支持NFC和
  4. Android Beam文件传输。

  5. 为在代码中测试是否支持Android Beam文件传输,我们先通过PackageManager.hasSystemFeature()
  6. 和参数FEATURE_NFC测试设备是否支持NFC。下一步,通过SDK_INT的值测试系统版本是否支持
  7. Android Beam文件传输。如果设备支持Android Beam文件传输,
  8. 那么获得一个NFC控制器的实例,它能允许我们与NFC硬件进行通信*/

  9. public class MainActivity extends Activity {
  10.     ...
  11.     NfcAdapter mNfcAdapter;
  12.     // Flag to indicate that Android Beam is available
  13.     boolean mAndroidBeamAvailable  = false;
  14.     ...
  15.     @Override
  16.     protected void onCreate(Bundle savedInstanceState) {
  17.         ...
  18.         // NFC isn't available on the device
  19.         if (!PackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)) {
  20.             /*
  21.              * Disable NFC features here.
  22.              * For example, disable menu items or buttons that activate
  23.              * NFC-related features
  24.              */
  25.             ...
  26.         // Android Beam file transfer isn't supported
  27.         } else if (Build.VERSION.SDK_INT <
  28.                 Build.VERSION_CODES.JELLY_BEAN_MR1) {
  29.             // If Android Beam isn't available, don't continue.
  30.             mAndroidBeamAvailable = false;
  31.             /*
  32.              * Disable Android Beam file transfer features here.
  33.              */
  34.             ...
  35.         // Android Beam file transfer is available, continue
  36.         } else {
  37.         mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
  38.         ...
  39.         }
  40.     }
  41.     ...
  42. }
复制代码
创建一个提供文件的回调函数
  1. /**一旦确认了设备支持Android Beam文件传输,那么可以添加一个回调函数,
  2. 当Android Beam文件传输监测到用户希望向另一个支持NFC的设备发送文件时,
  3. 系统就会调用该函数。在该回调函数中,返回一个Uri对象数组,
  4. Android Beam文件传输会将URI对应的文件拷贝给要接收这些文件的设备。

  5. 要添加这个回调函数,需要实现NfcAdapter.CreateBeamUrisCallback接口
  6. 和它的方法:createBeamUris(),下面是一个例子:*/

  7. public class MainActivity extends Activity {
  8.     ...
  9.     // List of URIs to provide to Android Beam
  10.     private Uri[] mFileUris = new Uri[10];
  11.     ...
  12.     /**
  13.      * Callback that Android Beam file transfer calls to get
  14.      * files to share
  15.      */
  16.     private class FileUriCallback implements
  17.             NfcAdapter.CreateBeamUrisCallback {
  18.         public FileUriCallback() {
  19.         }
  20.         /**
  21.          * Create content URIs as needed to share with another device
  22.          */
  23.         @Override
  24.         public Uri[] createBeamUris(NfcEvent event) {
  25.             return mFileUris;
  26.         }
  27.     }
  28.     ...
  29. }
  30. /**
  31. 一旦实现了这个接口,通过调用setBeamPushUrisCallback()将回调函数提供给
  32. Android Beam文件传输。下面是一个例子:*/

  33. public class MainActivity extends Activity {
  34.     ...
  35.     // Instance that returns available files from this app
  36.     private FileUriCallback mFileUriCallback;
  37.     ...
  38.     @Override
  39.     protected void onCreate(Bundle savedInstanceState) {
  40.         ...
  41.         // Android Beam file transfer is available, continue
  42.         ...
  43.         mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
  44.         /*
  45.          * Instantiate a new FileUriCallback to handle requests for
  46.          * URIs
  47.          */
  48.         mFileUriCallback = new FileUriCallback();
  49.         // Set the dynamic callback for URI requests.
  50.         mNfcAdapter.setBeamPushUrisCallback(mFileUriCallback,this);
  51.         ...
  52.     }
  53.     ...
  54. }
  55. /**
  56. Note:我们也可以将Uri对象数组通过应用程序的NfcAdapter实例,
  57. 直接提供给NFC框架。如果能在NFC触碰事件发生之前,定义这些URI,
  58. 那么可以选择使用这个方法。更多关于这个方法的知识,
  59. 请参考:NfcAdapter.setBeamPushUris()。/*
复制代码
指定要发送的文件
  1. /**为了将一或多个文件发送给其他支持NFC的设备,需要为每一个文件获取一个
  2. File URI(一个具有文件格式(file scheme)的URI),
  3. 然后将它们添加至一个Uri对象数组中。此外,要传输一个文件,
  4. 我们必须也拥有该文件的读权限。下例展示了如何根据文件名获取其File URI
  5. ,然后将URI添加至数组当中:*/

  6.     /*
  7.      * Create a list of URIs, get a File,
  8.      * and set its permissions
  9.      */
  10.     private Uri[] mFileUris = new Uri[10];
  11.     String transferFile = "transferimage.jpg";
  12.     File extDir = getExternalFilesDir(null);
  13.     File requestFile = new File(extDir, transferFile);
  14.     requestFile.setReadable(true, false);
  15.     // Get a URI for the File and add it to the list of URIs
  16.     fileUri = Uri.fromFile(requestFile);
  17.     if (fileUri != null) {
  18.         mFileUris[0] = fileUri;
  19.     } else {
  20.         Log.e("My Activity", "No File URI available for file.");
  21.     }
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-08-12 10:47 |只看该作者
现在很多手机Android都支持NFC了。我买了个(不是,是公司买的)Google 7就支持。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP