布局
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout tools:context="com.example.app2.MainActivity" android:layout_height="match_parent" android:orientation="vertical" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android">
-<LinearLayout android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="1">
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="打开" android:id="@+id/bt_open"/>
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="关闭" android:id="@+id/bt_close"/>
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="扫描" android:id="@+id/bt_discovery"/>
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="已配对" android:id="@+id/bt_bond"/>
</LinearLayout>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:text="附近的蓝牙设备,点击进行配对" android:background="#e21919"/>
<ListView android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="5" android:id="@+id/lv_discovery"/>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:text="已配对设备,点击发送数据" android:background="#e21919"/>
<ListView android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="5" android:id="@+id/lv_bond"/>
</LinearLayout>
开启,关闭,搜索,显示(发送一个字符串)
package com.example.app2;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button bt_open;
private Button bt_close;
private Button bt_discovery;
private Button bt_bond;
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
private ListView lv_discovery;
private ArrayList<BluetoothDevice> list_discovery = new ArrayList<>();
private MyAdapter myAdapter_discobery;
private ListView lv_bond;
private ArrayList<BluetoothDevice> list_bond = new ArrayList<>();
private MyAdapter myAdapter_bond;
private BluetoothManager bluetoothManager ;
private BluetoothAdapter bluetoothAdapter;
private MyRecevier myRecevier;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
bt_open = (Button) findViewById(R.id.bt_open);
bt_close = (Button) findViewById(R.id.bt_close);
bt_discovery = (Button) findViewById(R.id.bt_discovery);
bt_bond = (Button) findViewById(R.id.bt_bond);
lv_discovery = (ListView) findViewById(R.id.lv_discovery);
lv_bond = (ListView) findViewById(R.id.lv_bond);
bt_open.setOnClickListener(this);
bt_close.setOnClickListener(this);
bt_discovery.setOnClickListener(this);
bt_bond.setOnClickListener(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.BLUETOOTH,Manifest.permission.BLUETOOTH_ADMIN},100);
}
bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
myAdapter_discobery = new MyAdapter(list_discovery,this);
lv_discovery.setAdapter(myAdapter_discobery);
myAdapter_bond = new MyAdapter(list_bond , this);
lv_bond.setAdapter(myAdapter_bond);
myRecevier = new MyRecevier();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myRecevier,intentFilter);
lv_discovery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
list_discovery.get(position).createBond();
}
});
lv_bond.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
try {
BluetoothSocket bluetoothSocket = list_bond.get(position).createInsecureRfcommSocketToServiceRecord(uuid);
bluetoothSocket.connect();
if (bluetoothSocket.isConnected()){
bluetoothSocket.getOutputStream().write("这是卤蛋的消息".getBytes());
}else {
Toast.makeText(MainActivity.this, "链接失败", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
Toast.makeText(MainActivity.this, "链接失败", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_open:
open();
break;
case R.id.bt_close:
close();
break;
case R.id.bt_discovery:
discovery();
break;
case R.id.bt_bond:
bond();
break;
}
}
private void bond() {
list_bond.clear();
Set<BluetoothDevice> bondedDevices = bluetoothAdapter.getBondedDevices();
list_bond.addAll(bondedDevices);
myAdapter_bond.notifyDataSetChanged();
}
private void discovery() {
bluetoothAdapter.startDiscovery();
}
private void close() {
bluetoothAdapter.disable();
}
private void open() {
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);
startActivityForResult(intent,100);
}
class MyRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
BluetoothDevice bd = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
list_discovery.add(bd);
myAdapter_discobery.notifyDataSetChanged();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myRecevier);
}
}
适配器
package com.example.app2;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends BaseAdapter {
private List<BluetoothDevice> list;
private Context context;
private LayoutInflater layoutInflater;
public MyAdapter(List<BluetoothDevice> list, Context context) {
this.list = list;
this.context = context;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null){
holder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.item,null);
holder.textView = convertView.findViewById(R.id.tv);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).getName());
return convertView;
}
class ViewHolder{
TextView textView;
}
}
服务端(接收数据)
package com.example.app3;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private Button bt;
private BluetoothAdapter adapter;
private BluetoothManager manager;
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter = manager.getAdapter();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.BLUETOOTH,Manifest.permission.BLUETOOTH_ADMIN},100);
}
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
server();
}
});
}
private void server() {
try {
BluetoothServerSocket serverSocket = adapter.listenUsingInsecureRfcommWithServiceRecord(adapter.getName(), uuid);
BluetoothSocket socket = serverSocket.accept();
Toast.makeText(this, ""+socket.getRemoteDevice().getName()+"链接了我", Toast.LENGTH_SHORT).show();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
String message = new String(bytes, 0, read);
Toast.makeText(this, ""+message, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}