Open rainit2006 opened 7 years ago
NFC: using AndroidBeam
Android4.0(以降ICS)からAndroidBeamという機能が搭載されました。これはNFCチップを搭載するAndroid端末同士でデータを交換する仕組みです。
参考网页: https://utage.headwaters.co.jp/blog/?p=1316 https://developer.android.com/guide/topics/connectivity/nfc/nfc.html#p2p
发信端:
受信端:
`
OS 4.1版本后扩张了BTSSP方式。 NFC通信を起点として、Bluetooth通信でファイル転送を可能にしました。これをBTSSPと呼びます。 不需要进行BT的配对等处理,OS会为我们做。 发送端: onCreate()に”mNfcAdapter.setNdefPushMessageCallback(this, this);”ではなく NfcAdapter.setBeamPushUrisCallback(this, this); を実装します。
Socekt
Basic Socket class: connect(), getInputStream(), ServerSocket class: accept(), InputStream class: read(), OutputStream class: write()
Sample ==Server side===
String outputFilepath = "f.out"; // 受信したファイルの保存先
byte[] buffer = new byte[512]; // ファイル受信時のバッファ
/ ソケットの準備
ServerSocket serverSocket = new ServerSocket(PORT);
Socket socket = serverSocket.accept();
// ストリームの準備
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = new FileOutputStream(outputFilepath);
// ファイルをストリームで受信
int fileLength;
while ((fileLength = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, fileLength);
}
// 終了処理
outputStream.flush();
outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
===Client side===
String filepath = "f.in"; // 送信するファイルのパス
File file = new File(filepath); // 送信するファイルのオブジェクト
byte[] buffer = new byte[512]; // ファイル送信時のバッファ
// ソケットの準備
Socket socket = new Socket(HOST, PORT);
// ストリームの準備
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = socket.getOutputStream();
// ファイルをストリームで送信
int fileLength;
while ((fileLength = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, fileLength);
}
// 終了処理
outputStream.flush();
outputStream.close();
inputStream.close();
socket.close();
Reference: http://blog.csdn.net/Thanksgining/article/details/43561053
从Socket里读取数据到byte[]里
InputStream inputStream = socket.getInputStream();
// read from the stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] content = new byte[ 2048 ];
int bytesRead = -1;
while( ( bytesRead = inputStream.read( content ) ) != -1 ) {
baos.write( content, 0, bytesRead );
} // while
Bluetooth
Android 蓝牙API中,存在安全连接和不安全连接API. 安全连接API: createRfcommSocketToServiceRecord 创建安全连接Client Socket http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createRfcommSocketToServiceRecord(java.util.UUID)
listenUsingRfcommWithServiceRecord 创建安全连接 Server Socket http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#listenUsingRfcommWithServiceRecord(java.lang.String, java.util.UUID)
当调用createRfcommSocketToServiceRecord创建client socket后,进行connect操作去连接PC时,可能会触发配对操作。
不安全连接API: createInsecureRfcommSocketToServiceRecord创建不安全连接Client Socket http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createInsecureRfcommSocketToServiceRecord(java.util.UUID)
listenUsingInsecureRfcommWithServiceRecord创建不安全连接 Server Socket http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#listenUsingInsecureRfcommWithServiceRecord(java.lang.String, java.util.UUID)