Android 通过蓝牙发送整数或字符串-设备已配对

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

所以我一直在开发一个应用程序,它允许我通过蓝牙发送一个简单的字符串,如“Hello”,或整数,如“2”,我已经在设备之间建立了连接,它们都是成对的。我想知道的是一个示例代码,说明如何使用套接字和其他我需要通过应用程序发送东西的东西

到目前为止,我的代码是:

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);
}