Android 近场通信 蓝牙通信

  • 一.近场通信介绍
    • 1.三种主要近场通信技术的特点
    • 2.比较
    • 3.近场通信技术的未来发展
  • 二.蓝牙通信
    • 1.核心
    • 2.布局
    • 3.功能
    • 其他配置
  • 最终显示

一.近场通信介绍

1.三种主要近场通信技术的特点

近场通信技术是一种短距离无线通信技术,它允许设备之间进行非接触点对点数据传输和数据交换。
近场通信最初是由恩智浦和索尼公司在 2002 年共同联合开发的新一代无线通信技术,并被国际标准化组织与国际电工委员会等接收为标准。

近场通信技术是一种短距离无线通信技术,它允许设备之间进行非接触点对点数据传输和数据交换。近场通信最初是由恩智浦和索尼公司在 2002 年共同联合开发的新一代无线通信技术,并被国际标准化组织与国际电工委员会等接收为标准。NFC: NFC是英文Near Field Communication的缩写,是一种近距离、非接触式识别的无线通信技术,由飞利浦和索尼等公司共同开发,通常有效通信距离在4厘米以内,通信速率为106一848 Kbit/s,工作频率为13.56 MHz。 通过NFC 技术,可以实现Android设备与NFC Tag ( target的简写)或其他Android设备之间小批量数据的传输。NFC可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。蓝牙:蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。蓝牙使当前的一些便携移动设备和计算机设备能够不需要电缆就能连接到互联网,并且可以无线接入互联网。蓝牙是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4~2.485GHz的ISM波段的UHF无线电波)。蓝牙可连接多个设备,克服了数据同步的难题。WiFi:WiFi技术与蓝牙技术一样也是使用 2.4 GHz ISM附近的无线频段,该技术目前有两个标准即 IEEE 802.11a 和IEEE 802.11b。WiFi技术的主要特点有数据传输速率高、覆盖范围较宽,适合在办公室、家庭以及公共场所中布设热点,可作为有线宽带的一种延伸与补充

2.比较

网络类型 NFC 蓝牙 WIFI
连接方式 点对点 单点对多点 单点对多点
使用距离 <=0.02m <=10m <10M-1000M
速度 <500Kbps <24Mbps <1.3Gbps
功耗 很低 中低

3.近场通信技术的未来发展

NFC:NFC手机中应用最有前景的一项功能是移动支付功能,移动支付成本较低并且方便了用户,给用户带来了全新的消费体验,现在基于NFC技术的移动支付已经成为一种发展趋势。随着在手机支付、电子门禁等领域的成功应用,NFC 技术将更加普及,同时与手机的结合也将越来越紧密蓝牙:与其他无线解决方案相比,使用蓝牙技术的物联网设备数量更多,让蓝牙成为物联网领域的首要技术。在消费需求和创新技术驱动下,可穿戴设备和物联网产品的发展驶入了快车道,在无人驾驶、智能设备、资产追踪等日趋智能化中将会被广泛应用,而随着万物互联时代的到临,物联网技术围绕人员、资产的室内位置服务需求也愈加强烈。WiFi:从WiFi技术的应用发展情况分析,第一阶段以手机、平板电脑、笔记本电脑等消费级电子终端为驱动,第二阶段以智能家居、智慧城市等物联网应用为驱动,第三阶段以虚拟现实、超高清视频应用等新一代高速率应用为驱动,而在WiFi 6技术标准发展推动下,WiFi技术向第三阶段迈进的步伐日益加快。

二.蓝牙通信

1.核心

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

2.布局

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_openBT"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/open_bt"/><Buttonandroid:layout_marginTop="10dp"android:id="@+id/btn_search"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/search"/><TextViewandroid:layout_marginTop="10dp"android:id="@+id/text_state"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/connect_state"/><Buttonandroid:layout_marginTop="10dp"android:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/send_msg"/><TextViewandroid:layout_marginTop="10dp"android:id="@+id/text_msg"android:layout_width="wrap_content"android:layout_height="wrap_content"/><ListViewandroid:layout_marginTop="10dp"android:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>

bluetooth_device_list_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="match_parent"android:layout_height="wrap_content"android:minHeight="58dp"android:padding="5dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:id="@+id/device_name"android:gravity="center_vertical"android:textColor="#000"/><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/device_info"android:gravity="center_vertical|right"android:textColor="#000"/></LinearLayout>

3.功能

MainActivity的编写

package com.example.bluetooth;import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private BluetoothAdapter bTAdatper;private ListView listView;private BlueToothDeviceAdapter adapter;private TextView text_state;private TextView text_msg;private final int BUFFER_SIZE = 1024;private static final String NAME = "BT_DEMO";private static final UUID BT_UUID = UUID.fromString("02001101-0001-1000-8080-00805F9BA9BA");private ConnectThread connectThread;private ListenerThread listenerThread;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();bTAdatper = BluetoothAdapter.getDefaultAdapter();initReceiver();listenerThread = new ListenerThread();listenerThread.start();}private void initView() {findViewById(R.id.btn_openBT).setOnClickListener(this);findViewById(R.id.btn_search).setOnClickListener(this);findViewById(R.id.btn_send).setOnClickListener(this);text_state = (TextView) findViewById(R.id.text_state);text_msg = (TextView) findViewById(R.id.text_msg);listView = (ListView) findViewById(R.id.listView);adapter = new BlueToothDeviceAdapter(getApplicationContext(), R.layout.bluetooth_device_list_item);listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {if (bTAdatper.isDiscovering()) {bTAdatper.cancelDiscovery();}BluetoothDevice device = (BluetoothDevice) adapter.getItem(position);//连接设备connectDevice(device);}});}private void initReceiver() {//注册广播IntentFilter filter = new IntentFilter();filter.addAction(BluetoothDevice.ACTION_FOUND);filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);registerReceiver(mReceiver, filter);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_openBT:openBlueTooth();break;case R.id.btn_search:searchDevices();break;case R.id.btn_send:if (connectThread != null) {connectThread.sendMsg("这是蓝牙发送过来的消息");}break;}}/*** 开启蓝牙*/private void openBlueTooth() {if (bTAdatper == null) {Toast.makeText(this, "当前设备不支持蓝牙功能", Toast.LENGTH_SHORT).show();}if (!bTAdatper.isEnabled()) {/* Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivity(i);*/bTAdatper.enable();}//开启被其它蓝牙设备发现的功能if (bTAdatper.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//设置为一直开启i.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);startActivity(i);}}/*** 搜索蓝牙设备*/private void searchDevices() {if (bTAdatper.isDiscovering()) {bTAdatper.cancelDiscovery();}getBoundedDevices();bTAdatper.startDiscovery();}/*** 获取已经配对过的设备*/private void getBoundedDevices() {//获取已经配对过的设备Set<BluetoothDevice> pairedDevices = bTAdatper.getBondedDevices();//将其添加到设备列表中if (pairedDevices.size() > 0) {for (BluetoothDevice device : pairedDevices) {adapter.add(device);}}}/*** 连接蓝牙设备*/private void connectDevice(BluetoothDevice device) {text_state.setText(getResources().getString(R.string.connecting));try {//创建SocketBluetoothSocket socket = device.createRfcommSocketToServiceRecord(BT_UUID);//启动连接线程connectThread = new ConnectThread(socket, true);connectThread.start();} catch (IOException e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();//取消搜索if (bTAdatper != null && bTAdatper.isDiscovering()) {bTAdatper.cancelDiscovery();}//注销BroadcastReceiver,防止资源泄露unregisterReceiver(mReceiver);}private final BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (BluetoothDevice.ACTION_FOUND.equals(action)) {BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//避免重复添加已经绑定过的设备if (device.getBondState() != BluetoothDevice.BOND_BONDED) {adapter.add(device);adapter.notifyDataSetChanged();}} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {Toast.makeText(MainActivity.this, "开始搜索", Toast.LENGTH_SHORT).show();} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {Toast.makeText(MainActivity.this, "搜索完毕", Toast.LENGTH_SHORT).show();}}};/*** 连接线程*/private class ConnectThread extends Thread {private BluetoothSocket socket;private boolean activeConnect;InputStream inputStream;OutputStream outputStream;private ConnectThread(BluetoothSocket socket, boolean connect) {this.socket = socket;this.activeConnect = connect;}@Overridepublic void run() {try {//如果是自动连接 则调用连接方法if (activeConnect) {socket.connect();}text_state.post(new Runnable() {@Overridepublic void run() {text_state.setText(getResources().getString(R.string.connect_success));}});inputStream = socket.getInputStream();outputStream = socket.getOutputStream();byte[] buffer = new byte[BUFFER_SIZE];int bytes;while (true) {//读取数据bytes = inputStream.read(buffer);if (bytes > 0) {final byte[] data = new byte[bytes];System.arraycopy(buffer, 0, data, 0, bytes);text_msg.post(new Runnable() {@Overridepublic void run() {text_msg.setText(getResources().getString(R.string.get_msg)+new String(data));}});}}} catch (IOException e) {e.printStackTrace();text_state.post(new Runnable() {@Overridepublic void run() {text_state.setText(getResources().getString(R.string.connect_error));}});}}/*** 发送数据** @param msg*/public void sendMsg(final String msg) {byte[] bytes = msg.getBytes();if (outputStream != null) {try {//发送数据outputStream.write(bytes);text_msg.post(new Runnable() {@Overridepublic void run() {text_msg.setText(getResources().getString(R.string.send_msgs)+msg);}});} catch (IOException e) {e.printStackTrace();text_msg.post(new Runnable() {@Overridepublic void run() {text_msg.setText(getResources().getString(R.string.send_msg_error)+msg);}});}}}}/*** 监听线程*/private class ListenerThread extends Thread {private BluetoothServerSocket serverSocket;private BluetoothSocket socket;@Overridepublic void run() {try {serverSocket = bTAdatper.listenUsingRfcommWithServiceRecord(NAME, BT_UUID);while (true) {//线程阻塞,等待别的设备连接socket = serverSocket.accept();text_state.post(new Runnable() {@Overridepublic void run() {text_state.setText(getResources().getString(R.string.connecting));}});connectThread = new ConnectThread(socket, false);connectThread.start();}} catch (IOException e) {e.printStackTrace();}}}
}

BlueToothDeviceAdapter

package com.example.bluetooth;import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;public class BlueToothDeviceAdapter extends ArrayAdapter<BluetoothDevice> {private final LayoutInflater mInflater;private int mResource;public BlueToothDeviceAdapter(Context context, int resource) {super(context, resource);mInflater = LayoutInflater.from(context);mResource = resource;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = mInflater.inflate(mResource, parent, false);}TextView name = (TextView) convertView.findViewById(R.id.device_name);TextView info = (TextView) convertView.findViewById(R.id.device_info);BluetoothDevice device = getItem(position);name.setText(device.getName());info.setText(device.getAddress());return convertView;}
}

其他配置

color string dimens

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="purple_200">#FFBB86FC</color><color name="purple_500">#FF6200EE</color><color name="purple_700">#FF3700B3</color><color name="teal_200">#FF03DAC5</color><color name="teal_700">#FF018786</color><color name="black">#FF000000</color><color name="white">#FFFFFFFF</color><color name="colorPrimary">#3F51B5</color><color name="colorPrimaryDark">#303F9F</color><color name="colorAccent">#FF4081</color>
</resources><resources><string name="app_name">Bluetooth</string><string name="open_bt">打开蓝牙</string><string name="search">搜索设备</string><string name="send_msg">发送消息</string><string name="connect_error">连接失败</string><string name="connect_success">连接成功</string><string name="connecting">连接中</string><string name="connect_state">连接状态</string><string name="send_msgs">发送数据:</string><string name="send_msg_error">发送数据失败:</string><string name="get_msg">获取到数据:</string>
</resources><?xml version="1.0" encoding="utf-8"?>
<resources><!-- Default screen margins, per the Android Design guidelines. --><dimen name="activity_horizontal_margin">16dp</dimen><dimen name="activity_vertical_margin">16dp</dimen>
</resources>

最终显示


手机1和手机2进行蓝牙连接后,两台手机分别连接Android studio下载App后运行打开

Android 移动开发 近场通信 蓝牙通信相关推荐

  1. 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)

    haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...

  2. Android Studio 开发--近场通信技术

    Android Studio 开发–近场通信技术 文章目录 Android Studio 开发--近场通信技术 一.三种近场通信技术的特点 1.BlueTooth蓝牙技术 1.1概念 1.2主要特点 ...

  3. 实现Android和PC之间的蓝牙通信

    这两天想实现PC和安卓手机的通信,限于水平,知道的方法大概有两种:基于数据包的socket和蓝牙.虽然看起来简单,但调也调了两天多.自己测试了下socket,在室内WIFI环境下时延大概是0.1s.而 ...

  4. 移动开发作业6——蓝牙通信的简要设计与开发

    一.蓝牙通信原理介绍 Android 平台包含蓝牙网络堆栈支持,此支持能让设备以无线方式与其他蓝牙设备交换数据.应用框架提供通过 Android Bluetooth API 访问蓝牙功能的权限.这些 ...

  5. 移动开发作业六 蓝牙通信

    一.蓝牙通信的步骤 开启蓝牙 搜索可用设备 创建蓝牙socket 获取输入输出流 断开连接关闭蓝牙 二.几个重要的类 BluetoothAdapter BluetoothGatt BluetoothD ...

  6. 车载开发中,蓝牙通信需要学习那些核心技术点?

    车载蓝牙通信是指在汽车内部或车辆与外部设备之间使用蓝牙技术进行数据传输和通信.蓝牙5.0是现代蓝牙技术的最新版本,它引入了一系列新功能和改进,提供了更快的数据传输速度.更长的传输距离.更稳定的连接和更 ...

  7. 安卓近距离通信--蓝牙通信开发

    结果展示 实现方法 获取蓝牙适配器 BluetoothAdapter 代表本地设备的蓝牙适配器.该BluetoothAdapter可以执行基本的蓝牙任务,例如启动设备发现,查询配对的设备列表,使用已知 ...

  8. Android底层开发之旅—蓝牙系统分析

    2019独角兽企业重金招聘Python工程师标准>>> Android蓝牙系统分为四个层次,内核层.BlueZ库.BlueTooth的适配库.BlueTooth的JNI部分.Java ...

  9. Android中的蓝牙通信

    一.蓝牙简介 现有的蓝牙主要分为两类: 经典蓝牙:3.0版本以下的蓝牙,都称为"经典蓝牙",功耗高.传输数据量大.传输距离只有10米. 低功耗蓝牙:4.0及以上版本的蓝牙就是低功耗 ...

最新文章

  1. linux下修改组的密码,Linux用户和组的操作(八) 修改用户密码 passwd
  2. Android View之间的触摸事件传递图
  3. ELK日志分析平台.1-搭建
  4. 获取Class对象方式
  5. MYSQL小函数大用途之-------FIND_IN_SET
  6. python多维数据分析_使用python进行数据分析
  7. 前端安全问题及解决办法
  8. office另存为pdf的加载项_你可能需要用到的office转换技巧
  9. Chrome浏览器去广告插件 —— (Adblock Plus)
  10. ISO国家和地区代码
  11. English语法_分词用法-作名词
  12. RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(上)
  13. python爬虫由浅入深8---基于正则表达式查询的淘宝比价定向爬虫
  14. Linux运维高级工程师要掌握的技能
  15. Android吃鸡 3dtouch,绝地求生刺激战场3Dtouch怎么用 3Dtouch设置攻略
  16. 5.1.2全景声音箱摆位_全景声音响系统,音箱应该如何摆位?(5.1.2、5.1.4篇)
  17. python 机器学习 sklearn 朴素贝叶斯
  18. Java Swing(二)按钮点击事件处理ActionListener
  19. System.Data.Odbc.OdbcException: ERROR [IM001] [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能
  20. MATLAB语言基础学习之ls函数

热门文章

  1. CMIP6文件名含义详解
  2. 云主机安全加固最佳实践指导书
  3. 经方治愈神经性皮炎一例
  4. 在建设和培养技术团队,要有前瞻性
  5. 江苏省昆山市软件公司汇总
  6. str[]与*str的区别
  7. 前端面试总结(vue篇)
  8. 飞奔的TCL,崛起的中国科技巨头
  9. PTA 直捣黄龙 (30 分)
  10. 究极花里胡哨的渐变是什么样子的?