15、NFC技术:使用Android Beam技术传输文件

时间:2023-03-09 04:42:25
15、NFC技术:使用Android Beam技术传输文件
传输文件的API

从Android4.1开始,NfcAdapter类增加了如下两个推送数据的方法。

NfcAdapter.setBeamPushUris
NfcAdapter.setBeamPushUrisCallback

这两个方法的原型如下:

public void setBeamPushUris(Uri[] uris, Activity activity);

public void setBeamPushUrisCallback(CreateBeamUrisCallback callback, Activity activity);

Demo
15、NFC技术:使用Android Beam技术传输文件
 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); 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;
} }
 <uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

其实内部是蓝牙在传输,NFC已经不起作用了,可以相隔一定距离,即使NFC中断也没关系,因为是蓝牙在传输。