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

时间:2023-03-09 08:00:37
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);

示例

 import java.io.FileOutputStream;
import java.io.InputStream; import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateBeamUrisCallback;
import android.nfc.NfcEvent;
import android.os.Bundle; 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);
/*
* 下面两个调用将当前aty设为处理Nfc的应用
*/
mNfcAdapter = mNfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, , new Intent(this,
getClass()), );
try {
/*
* 下面代码是将assets中文件拷贝到"/sdcard/temp_icon.png"
* 两个nfc设备就是传输的文件就是这张图片
*/
InputStream is = getResources().getAssets().open("icon.png");
FileOutputStream fos = new FileOutputStream(targetFilename);
byte[] buffer = new byte[];
int n = is.read(buffer);
fos.write(buffer, , n);
fos.close();
is.close();
} catch (Exception e) { }
/*
* 注意,本示例是用 实现CreateBeamUrisCallback接口方法传输数据,注意
*/
mNfcAdapter.setBeamPushUrisCallback(this, this);
} /*
* CreateBeamUrisCallback接口的回调函数 创建uri数组 uri数组中就是要传输的所有文件
*/
@Override
public Uri[] createBeamUris(NfcEvent event) {
// 第1步,准备uri数组,本例中只传一个文件,所以大小为1,uri数组中就是要传输的所有文件
Uri[] uris = new Uri[];
// 第2步,根据要传输的文件的名字,构造一个file://类型的uri
Uri uri = Uri.parse("file://" + targetFilename);
// 第3步,赋值uri数组的各元素.
uris[] = uri; return uris;
}
}