Android 通过蓝牙发送整数或字符串-设备已配对
所以我一直在开发一个应用程序,它允许我通过蓝牙发送一个简单的字符串,如“Hello”,或整数,如“2”,我已经在设备之间建立了连接,它们都是成对的。我想知道的是一个示例代码,说明如何使用套接字和其他我需要通过应用程序发送东西的东西 到目前为止,我的代码是:Android 通过蓝牙发送整数或字符串-设备已配对,android,string,sockets,bluetooth,integer,Android,String,Sockets,Bluetooth,Integer,所以我一直在开发一个应用程序,它允许我通过蓝牙发送一个简单的字符串,如“Hello”,或整数,如“2”,我已经在设备之间建立了连接,它们都是成对的。我想知道的是一个示例代码,说明如何使用套接字和其他我需要通过应用程序发送东西的东西 到目前为止,我的代码是: public class MainActivity extends Activity { private TextView mStatusTv; private Button mActivateBtn; private Button mPai
public class MainActivity extends Activity {
private TextView mStatusTv;
private Button mActivateBtn;
private Button mPairedBtn;
private Button mScanBtn;
private ProgressDialog mProgressDlg;
private ArrayList<BluetoothDevice> mDeviceList = new ArrayList<BluetoothDevice>();
private BluetoothAdapter mBluetoothAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStatusTv = (TextView) findViewById(R.id.tv_status);
mActivateBtn = (Button) findViewById(R.id.btn_enable);
mPairedBtn = (Button) findViewById(R.id.btn_view_paired);
mScanBtn = (Button) findViewById(R.id.btn_scan);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mProgressDlg = new ProgressDialog(this);
mProgressDlg.setMessage("Scanning...");
mProgressDlg.setCancelable(false);
mProgressDlg.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
mBluetoothAdapter.cancelDiscovery();
}
});
if (mBluetoothAdapter == null) {
showUnsupported();
} else {
mPairedBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if (pairedDevices == null || pairedDevices.size() == 0) {
showToast("No Paired Devices Found");
} else {
ArrayList<BluetoothDevice> list = new ArrayList<BluetoothDevice>();
list.addAll(pairedDevices);
Intent intent = new Intent(MainActivity.this, DevicelistActivity.class);
intent.putParcelableArrayListExtra("device.list", list);
startActivity(intent);
}
}
});
mScanBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
mBluetoothAdapter.startDiscovery();
}
});
mActivateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
showDisabled();
} else {
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, 1000);
}
}
});
if (mBluetoothAdapter.isEnabled()) {
showEnabled();
} else {
showDisabled();
}
}
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, filter);
}
@Override
public void onPause() {
if (mBluetoothAdapter != null) {
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}
}
super.onPause();
}
@Override
public void onDestroy() {
unregisterReceiver(mReceiver);
super.onDestroy();
}
private void showEnabled() {
mStatusTv.setText("Bluetooth is On");
mActivateBtn.setText("Disable");
mActivateBtn.setEnabled(true);
mPairedBtn.setEnabled(true);
mScanBtn.setEnabled(true);
}
private void showDisabled() {
mStatusTv.setText("Bluetooth is Off");
mActivateBtn.setText("Enable");
mActivateBtn.setEnabled(true);
mPairedBtn.setEnabled(false);
mScanBtn.setEnabled(false);
}
private void showUnsupported() {
mStatusTv.setText("Bluetooth is unsupported by this device");
mActivateBtn.setText("Enable");
mActivateBtn.setEnabled(false);
mPairedBtn.setEnabled(false);
mScanBtn.setEnabled(false);
}
private void showToast(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
if (state == BluetoothAdapter.STATE_ON) {
showToast("Enabled");
showEnabled();
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
mDeviceList = new ArrayList<BluetoothDevice>();
mProgressDlg.show();
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
mProgressDlg.dismiss();
Intent newIntent = new Intent(MainActivity.this, DevicelistActivity.class);
newIntent.putParcelableArrayListExtra("device.list", mDeviceList);
startActivity(newIntent);
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
mDeviceList.add(device);
showToast("Found device " + device.getName());
}
}
};}
公共类MainActivity扩展活动{
私有文本视图mStatusTv;
专用按钮mActivateBtn;
专用按钮mPairedBtn;
专用按钮mScanBtn;
私人ProgressDialog mProgressDlg;
private ArrayList mDeviceList=new ArrayList();
私人蓝牙适配器mBluetoothAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStatusTv=(TextView)findViewById(R.id.tv_状态);
mActivateBtn=(按钮)findviewbyd(R.id.btn_enable);
mPairedBtn=(按钮)findviewbyd(R.id.btn\u view\u paired);
mScanBtn=(按钮)findviewbyd(R.id.btn\u扫描);
mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
mProgressDlg=新建进度对话框(此对话框);
设置消息(“扫描…”);
mProgressDlg.setCancelable(假);
mProgressDlg.setButton(DialogInterface.BUTTON_否定,“取消”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
mBluetoothAdapter.cancelDiscovery();
}
});
if(mBluetoothAdapter==null){
showUnsupported();
}否则{
mPairedBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
设置pairedDevices=mBluetoothAdapter.getBondedDevices();
如果(pairedDevices==null | | pairedDevices.size()==0){
showToast(“未找到配对设备”);
}否则{
ArrayList=新建ArrayList();
list.addAll(pairedDevices);
意向意向=新意向(MainActivity.this、DevicelistActivity.class);
intent.putParcelableArrayListExtra(“device.list”,list);
星触觉(意向);
}
}
});
mScanBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
mBluetoothAdapter.startDiscovery();
}
});
mActivateBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(mBluetoothAdapter.isEnabled()){
mBluetoothAdapter.disable();
showDisabled();
}否则{
意向意向=新意向(BluetoothAdapter.ACTION\u REQUEST\u ENABLE);
startActivityForResult(意向,1000);
}
}
});
if(mBluetoothAdapter.isEnabled()){
showEnabled();
}否则{
showDisabled();
}
}
IntentFilter=newintentfilter();
filter.addAction(BluetoothAdapter.ACTION\u STATE\u已更改);
filter.addAction(找到BluetoothDevice.ACTION);
filter.addAction(BluetoothAdapter.ACTION\u DISCOVERY\u已启动);
filter.addAction(BluetoothAdapter.ACTION\u DISCOVERY\u FINISHED);
registerReceiver(mrReceiver,过滤器);
}
@凌驾
公共无效暂停(){
if(mBluetoothAdapter!=null){
if(mBluetoothAdapter.isDiscovering()){
mBluetoothAdapter.cancelDiscovery();
}
}
super.onPause();
}
@凌驾
公共空间{
未注册接收人(mReceiver);
super.ondestory();
}
私有void showEnabled(){
mStatusTv.setText(“蓝牙开启”);
mActivateBtn.setText(“禁用”);
mActivateBtn.setEnabled(true);
mPairedBtn.setEnabled(true);
mScanBtn.setEnabled(真);
}
私有void showDisabled(){
mStatusTv.setText(“蓝牙已关闭”);
mActivateBtn.setText(“启用”);
mActivateBtn.setEnabled(true);
mPairedBtn.setEnabled(false);
mScanBtn.setEnabled(false);
}
私有void showUnsupported(){
mStatusTv.setText(“此设备不支持蓝牙”);
mActivateBtn.setText(“启用”);
mActivateBtn.setEnabled(false);
mPairedBtn.setEnabled(false);
mScanBtn.setEnabled(false);
}
私有void showtoos(字符串消息){
Toast.makeText(getApplicationContext(),message,Toast.LENGTH_SHORT.show();
}
专用最终广播接收器mReceiver=新广播接收器(){
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(BluetoothAdapter.ACTION\u STATE\u CHANGED.equals(ACTION)){
final int state=intent.getIntExtra(BluetoothAdapter.EXTRA_state,BluetoothAdapter.ERROR);
if(state==BluetoothAdapter.state_ON){
showToast(“已启用”);
showEnabled();
}
}else if(BluetoothAdapter.ACTION\u DISCOVERY\u STARTED.equals(ACTION)){
mDeviceList=newarraylist();
mProgressDlg.show();
}else if(BluetoothAdapter.ACTION\u DISCOVERY\u FINISHED.equals(ACTION)){
mProgressDlg.disclose();
Intent newIntent=newIntent(MainActivity.this、DevicelistActivity.class);
newIntent.putParcelableArrayListExtra(“device.list”,mDeviceList);
星触觉(新意图);
}else if(BluetoothDevice.ACTION_FOUND.equals(ACTION)){
BluetoothDevice设备=(BluetoothDevice)intent.getParcelableExtra(BluetoothDevice.EXTRA_设备);
mDeviceList.add(设备);
showToast(“找到的设备”+设备.getName());
}
}
};}
设备列表:
public class DevicelistActivity extends Activity {
private ListView mListView;
private Adapter mAdapter;
private ArrayList<BluetoothDevice> mDeviceList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_devicelist);
mDeviceList = getIntent().getExtras().getParcelableArrayList("device.list");
mListView = (ListView) findViewById(R.id.lv_paired);
mAdapter = new Adapter(this);
mAdapter.setData(mDeviceList);
mAdapter.setListener(new Adapter.OnPairButtonClickListener() {
@Override
public void onPairButtonClick(int position) {
BluetoothDevice device = mDeviceList.get(position);
if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
unpairDevice(device);
} else {
showToast("Pairing...");
pairDevice(device);
}
}
});
mListView.setAdapter(mAdapter);
registerReceiver(mPairReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));
}
@Override
public void onDestroy() {
unregisterReceiver(mPairReceiver);
super.onDestroy();
}
private void showToast(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
private void pairDevice(BluetoothDevice device) {
try {
Method method = device.getClass().getMethod("createBond", (Class[]) null);
method.invoke(device, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
}
private void unpairDevice(BluetoothDevice device) {
try {
Method method = device.getClass().getMethod("removeBond", (Class[]) null);
method.invoke(device, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
}
private final BroadcastReceiver mPairReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);
if (state == BluetoothDevice.BOND_BONDED && prevState == BluetoothDevice.BOND_BONDING) {
showToast("Paired");
Intent transmit = new Intent(DevicelistActivity.this,transmission.class);
startActivity(transmit);
} else if (state == BluetoothDevice.BOND_NONE && prevState == BluetoothDevice.BOND_BONDED){
showToast("Unpaired");
}
mAdapter.notifyDataSetChanged();
}
}
};}
public cl
public class Adapter extends BaseAdapter{
private LayoutInflater mInflater;
private List<BluetoothDevice> mData;
private OnPairButtonClickListener mListener;
public Adapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public void setData(List<BluetoothDevice> data) {
mData = data;
}
public void setListener(OnPairButtonClickListener listener) {
mListener = listener;
}
public int getCount() {
return (mData == null) ? 0 : mData.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.activity_adapter, null);
holder = new ViewHolder();
holder.nameTv = (TextView) convertView.findViewById(R.id.tv_name);
holder.addressTv = (TextView) convertView.findViewById(R.id.tv_address);
holder.pairBtn = (Button) convertView.findViewById(R.id.btn_pair);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
BluetoothDevice device = mData.get(position);
holder.nameTv.setText(device.getName());
holder.addressTv.setText(device.getAddress());
holder.pairBtn.setText((device.getBondState() == BluetoothDevice.BOND_BONDED) ? "Unpair" : "Pair");
holder.pairBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onPairButtonClick(position);
}
}
});
return convertView;
}
static class ViewHolder {
TextView nameTv;
TextView addressTv;
TextView pairBtn;
}
public interface OnPairButtonClickListener {
public abstract void onPairButtonClick(int position);
}