📅  最后修改于: 2023-12-03 15:10:22.965000             🧑  作者: Mango
敲敲是一款基于近场通讯技术的聊天应用,它可以让用户在手机之间传送消息,类似于传统的敲门砖。敲敲的名字来源于这个功能,用户可以在手机上敲击屏幕来发送/接收消息,同时也可以进行语音聊天、发送图片等操作。
敲敲的核心技术在于近场通讯技术,其主要基于以下技术实现:
首先,需要在两台设备上打开敲敲应用,进入聊天界面。在进入聊天界面时,会自动启用近场通讯模块,等待连接。
当两台设备的近场通讯模块连接成功后,就可以开始聊天了。用户可以通过敲击屏幕,发送消息给对方:
sendMessage(String message) async {
try {
await nfc.openSession("com.example.yourAppName"); // 打开 NFC 会话
var data = utf8.encode(message);
var response = await nfc.sendData(data); // 发送数据
if (response.isNotEmpty) {
print("Receive response: ${utf8.decode(response)}"); // 打印接收到的数据
}
} catch (error) {
print(error);
} finally {
await nfc.closeSession(); // 关闭 NFC 会话
}
}
在接收到对方发送的消息时,也可以通过 nfc
来处理,例如:
StreamSubscription<NfcMessage> _nfcSubscription;
// ...
void startNfcListener() {
_nfcSubscription = nfc.onMessage.listen((NfcMessage message) async {
String data = utf8.decode(message.data);
print("Receive message: $data");
// 处理消息
});
}
void stopNfcListener() {
if (_nfcSubscription != null) {
_nfcSubscription.cancel();
_nfcSubscription = null;
}
}
同时,敲敲也提供了其他功能,例如语音聊天、发送图片等。这些功能主要基于Firebase实现,例如:
void sendAudioMessage(File audioFile) async {
final storageReference = FirebaseStorage.instance.ref().child(audioFile.path);
final uploadTask = storageReference.putFile(audioFile);
final ref = FirebaseFirestore.instance.collection('chat-rooms').doc(chatRoomId);
final newMsg = VoiceMessage(
senderUid: _user.uid,
fileName: audioFile.path,
url: '',
duration: 0,
timestamp: DateTime.now().millisecondsSinceEpoch,
);
final messageMap = newMsg.toMap();
await ref.update({
'messageList': FieldValue.arrayUnion([messageMap])
});
}
敲敲是一款基于近场通讯技术的聊天应用,它的开发过程涉及到的技术非常多。但是,它也是一款极具挑战性和趣味性的应用,让用户可以在传统的敲门砖上发挥出更多的创意。