客户端
package com.example.day1107_re_bluetooth;
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.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.Toast;
import com.example.day1107_re_bluetooth.adapter.MyAdapter;
import com.example.day1107_re_bluetooth.listener.MyListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "---";
private Button btOpen;
private Button btClose;
private Button btDiscovery;
private Button btBond;
private RecyclerView rvDiscovery;
private RecyclerView rvBond;
private String[] permission = {
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
};
private MyAdapter dis_adapter;
private MyAdapter bond_adapter;
private List<BluetoothDevice> discovery_list = new ArrayList<>();
private List<BluetoothDevice> bond_list = new ArrayList<>();
public static BluetoothAdapter adapter;
public static BluetoothManager manager;
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_main);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(permission,100);
}
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter = manager.getAdapter();
MyBroadCast myBroadCast = new MyBroadCast();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myBroadCast,intentFilter);
initView();
}
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);
rvDiscovery = findViewById(R.id.rv_discovery);
rvBond = findViewById(R.id.rv_bond);
rvDiscovery.setLayoutManager(new LinearLayoutManager(this));
rvBond.setLayoutManager(new LinearLayoutManager(this));
dis_adapter = new MyAdapter(discovery_list,this);
bond_adapter = new MyAdapter(bond_list,this);
rvBond.setAdapter(bond_adapter);
rvDiscovery.setAdapter(dis_adapter);
buttonListener();
myClickListener();
}
private void myClickListener() {
bond_adapter.MyAdapter(new MyListener() {
@Override
public void onItemClick(int position) {
BluetoothDevice device = bond_list.get(position);
try {
socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();
if(socket.isConnected()){
Toast.makeText(MainActivity.this, "连接成功!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, ClientActivity.class);
startActivity(intent);
}else{
Toast.makeText(MainActivity.this, "连接失败!", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
Log.i(TAG, "onItemClick: 连接失败");
}
}
});
}
private void buttonListener() {
btOpen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
btDiscovery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
discovery_list.clear();
adapter.startDiscovery();
}
});
btBond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Set<BluetoothDevice> bondedDevices = adapter.getBondedDevices();
bond_list.addAll(bondedDevices);
bond_adapter.notifyDataSetChanged();
}
});
}
class MyBroadCast 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();
}
}
}
}
发送页面
package com.example.day1107_re_bluetooth;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
public class ClientActivity extends AppCompatActivity {
private EditText editSend;
private Button buttonSend;
private Button buttonImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
initView();
buttonListener();
}
private void buttonListener() {
buttonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = editSend.getText().toString().trim();
try {
OutputStream outputStream = MainActivity.socket.getOutputStream();
outputStream.write(text.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
});
buttonImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ClientActivity.this, "我执行了", Toast.LENGTH_SHORT).show();
new Thread(new Runnable() {
@Override
public void run() {
try {
FileInputStream fileInputStream = new FileInputStream("/sdcard/youyou.jpg");
OutputStream outputStream = MainActivity.socket.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len = fileInputStream.read(b)) != -1){
outputStream.write(b, 0, len);
Log.i("---", "onClick: "+len);
}
fileInputStream.close();
outputStream.close();
Log.i("---", "runs: 发送成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
});
}
private void initView() {
editSend = findViewById(R.id.edit_send);
buttonSend = findViewById(R.id.button_send);
buttonImage = findViewById(R.id.button_image);
}
}
服务端
package com.example.day1107_re_bluetooth;
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.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
public class ServerActivity extends AppCompatActivity {
private TextView tvServer;
private BluetoothManager manager;
private BluetoothAdapter adapter;
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
tvServer.setText(msg.obj.toString());
}
}
};
String[] permissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(permissions,101);
}
initView();
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter = manager.getAdapter();
new Thread(new Runnable() {
@Override
public void run() {
try {
BluetoothServerSocket socket = adapter.listenUsingInsecureRfcommWithServiceRecord(adapter.getName(), uuid);
while (true) {
BluetoothSocket accept = socket.accept();
new MyImageThread(accept,handler).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void initView() {
tvServer = findViewById(R.id.tv_server);
}
private class MyImageThread extends Thread {
private BluetoothSocket accept;
private Handler handler;
public MyImageThread(BluetoothSocket accept, Handler handler) {
this.accept = accept;
this.handler = handler;
}
@Override
public void run() {
byte[] b = new byte[1024];
int len = 0;
try {
FileOutputStream fileOutputStream = new FileOutputStream("/sdcard/xxx.png");
InputStream inputStream = accept.getInputStream();
int available = inputStream.available();
Log.i("---", "run: "+available);
while ((len = inputStream.read(b)) != -1) {
fileOutputStream.write(b, 0, len);
Log.i("---", "run: "+len);
}
fileOutputStream.close();
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class MyJsonThread extends Thread {
private BluetoothSocket accept;
private Handler handler;
public MyJsonThread(BluetoothSocket accept, Handler handler) {
this.accept = accept;
this.handler = handler;
}
@Override
public void run() {
try {
byte[] b = new byte[1024];
InputStream inputStream = accept.getInputStream();
int read = inputStream.read(b);
String message = new String(b, 0, read);
Log.i("yy", "run: "+message);
Message msg = Message.obtain();
msg.what = 0;
msg.obj = message;
handler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}