蓝牙页面
package com.example.work2;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.work2.adapter.MyAdapter;
import com.example.work2.bean.ChatBean;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private RecyclerView rvChat;
private String[] permissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.BLUETOOTH
};
private List<ChatBean> chat_list = new ArrayList<>();
private MyAdapter adapter;
private BluetoothSocket socket;
private TextView tt;
private LinearLayout ll;
private EditText editSend;
private Button btSend;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 0){
chat_list.add(new ChatBean("",String.valueOf(msg.obj),0));
adapter.notifyDataSetChanged();
}else{
chat_list.add(new ChatBean(String.valueOf(msg.obj),"",1));
adapter.notifyDataSetChanged();
}
}
};
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
private BluetoothManager manager;
private BluetoothAdapter tooth_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
socket = BlueToothActivity.socket;
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
tooth_adapter = manager.getAdapter();
initView();
server();
initData();
}
private void server() {
new Thread(new Runnable() {
@Override
public void run() {
try {
BluetoothServerSocket socket = tooth_adapter.listenUsingInsecureRfcommWithServiceRecord(tooth_adapter.getName(), uuid);
while(true) {
BluetoothSocket accept = socket.accept();
new MyThread(accept, handler).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void startThread() {
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[1024];
int read = inputStream.read(b);
String text = new String(b, 0, read);
Message msg = Message.obtain();
msg.what = 1;
msg.obj = text;
handler.sendMessage(msg);
Log.i("---", "server_run: 接收成功" + text);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
private void initData() {
btSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String text = editSend.getText().toString();
new Thread(new Runnable() {
@Override
public void run() {
try {
OutputStream outputStream = socket.getOutputStream();
outputStream.write(text.getBytes());
Log.i("---", "run: 发送成功!");
Message msg = Message.obtain();
msg.what = 0;
msg.obj = msg;
handler.sendMessage(msg);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
editSend.setText("");
}
});
}
private LinearLayoutManager linearLayoutManager;
private void initView() {
rvChat = findViewById(R.id.rv_chat);
linearLayoutManager = new LinearLayoutManager(this);
rvChat.setLayoutManager(linearLayoutManager);
editSend = findViewById(R.id.edit_send);
btSend = findViewById(R.id.bt_send);
adapter = new MyAdapter(chat_list, this);
rvChat.setAdapter(adapter);
tt = findViewById(R.id.tt);
ll = findViewById(R.id.ll);
}
private class MyThread extends Thread{
private BluetoothSocket socket;
private Handler handler;
public MyThread(BluetoothSocket socket, Handler handler) {
this.socket = socket;
this.handler = handler;
}
@Override
public void run() {
try {
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[1024];
int read = inputStream.read(b);
String msg = new String(b, 0, read);
Message obtain = Message.obtain();
obtain.what = 1;
obtain.obj = msg;
handler.sendMessage(obtain);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器与客户端
package com.example.work2;
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.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import com.example.work2.adapter.MyAdapter;
import com.example.work2.adapter.MyToothAdapter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public class BlueToothActivity extends AppCompatActivity {
private String[] permissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.BLUETOOTH
};
private Button btOpen;
private Button btClose;
private Button btDiscovery;
private Button btBond;
private ListView lvDiscovery;
private ListView lvBond;
private List<BluetoothDevice> discovery_list = new ArrayList<>();
private List<BluetoothDevice> bond_list = new ArrayList<>();
private MyToothAdapter dis_adapter;
private MyToothAdapter bond_adapter;
private BluetoothAdapter adapter;
private BluetoothManager manager;
private MyReceiver myReceiver;
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
public static BluetoothSocket socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blue_tooth);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissions, 101);
}
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter = manager.getAdapter();
myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myReceiver,intentFilter);
startBroad();
initView();
byListener();
lvListener();
}
private void byListener() {
btBond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bond_list.clear();
Set<BluetoothDevice> bondedDevices = adapter.getBondedDevices();
bond_list.addAll(bondedDevices);
bond_adapter.notifyDataSetChanged();
}
});
btDiscovery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
discovery_list.clear();
adapter.startDiscovery();
}
});
}
private void lvListener() {
lvBond.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
new Thread(new Runnable() {
@Override
public void run() {
BluetoothDevice device = bond_list.get(position);
try {
socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();
if(socket.isConnected()){
Log.i("---", "client_run: 连接成功!");
Intent intent = new Intent(BlueToothActivity.this, MainActivity.class);
startActivity(intent);
}else{
Log.i("---", "client_run: 连接失败");
}
} catch (IOException e) {
Log.i("---", "client_run: 连接失败");
}
}
}).start();
}
});
}
private void startBroad() {
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);
startActivityForResult(intent,102);
}
private void initView() {
btOpen = findViewById(R.id.bt_open);
btClose = findViewById(R.id.bt_close);
btDiscovery = findViewById(R.id.bt_discovery);
btBond = findViewById(R.id.bt_bond);
lvDiscovery = findViewById(R.id.lv_discovery);
lvBond = findViewById(R.id.lv_bond);
dis_adapter = new MyToothAdapter(discovery_list,this);
lvDiscovery.setAdapter(dis_adapter);
bond_adapter = new MyToothAdapter(bond_list,this);
lvBond.setAdapter(bond_adapter);
}
class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
discovery_list.add(device);
dis_adapter.notifyDataSetChanged();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}
多布局页面
package com.example.work2.adapter;
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 com.example.work2.R;
import java.util.List;
public class MyToothAdapter extends BaseAdapter {
private List<BluetoothDevice> totalList;
private Context context;
private LayoutInflater layoutInflater;
public MyToothAdapter(List<BluetoothDevice> totalList, Context context) {
this.totalList = totalList;
this.context = context;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return totalList.size();
}
@Override
public Object getItem(int position) {
return totalList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Viewholder viewholder = null;
if (convertView == null) {
viewholder = new Viewholder();
convertView = layoutInflater.inflate(R.layout.layout_tooth,null);
viewholder.textView_tooth = convertView.findViewById(R.id.text_tooth);
convertView.setTag(viewholder);
}else{
viewholder = (Viewholder) convertView.getTag();
}
viewholder.textView_tooth.setText(totalList.get(position).getName());
return convertView;
}
class Viewholder{
TextView textView_tooth;
}
}