rainit2006 / Android-

记录一下Android基本知识
0 stars 0 forks source link

Network: Socket/NFC/Bluetooth #6

Open rainit2006 opened 7 years ago

rainit2006 commented 7 years ago
rainit2006 commented 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

发信端:

  1. 声明类继承CreateNdefMessageCallback接口
  2. 取得NFCAdapter。 mNfcAdapter = NfcAdapter.getDefaultAdapter(this); 3。 登录callback。 mNfcAdapter.setNdefPushMessageCallback(this, this);
  3. 实现createNdefMessage(NfcEvent event)函数

受信端:

  1. マニフェストファイルに受信側のActivityにIntent-Filterを設ける。その中、送信側で設定したキーをmimeTypeに設定します。
  2. 在 public synchronized void onResume() 里实现受信处理 `@Override public synchronized void onResume() { super.onResume(); Intent intent = getIntent(); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msg = (NdefMessage) rawMsgs[0]; String string1 = new String(msg.getRecords()[0].getPayload()); String string2 = new String(msg.getRecords()[1].getPayload()); } }

`

OS 4.1版本后扩张了BTSSP方式。 NFC通信を起点として、Bluetooth通信でファイル転送を可能にしました。これをBTSSPと呼びます。 不需要进行BT的配对等处理,OS会为我们做。 发送端: onCreate()に”mNfcAdapter.setNdefPushMessageCallback(this, this);”ではなく NfcAdapter.setBeamPushUrisCallback(this, this); を実装します。

rainit2006 commented 7 years ago

Socekt

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();

// 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

rainit2006 commented 7 years ago

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)