package com.sirius.botasky.bledemo; import android.app.ProgressDialog; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattService; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.sirius.botasky.bledemo.callbacks.ConnectResultCallback; import com.sirius.botasky.bledemo.callbacks.OperationResultCallback; import com.sirius.botasky.cyberble.callback.ScanCallback; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private Button mBtnStartScan, mBtnStopScan; private RecyclerView mRvDevicesList; private BleManager mBleManager; private BleDeviceAdapter mRecyclerAdapter; private ProgressDialog mConnectingDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //蓝牙管理单例初始化 BleManager.init(getApplicationContext()); mBleManager = BleManager.getInstance(); //设置监听 mBleManager.setmConnectResultCallback(new ConnectResultCallback() { @Override public void connectResult(final String results, final boolean isConnect) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, results, Toast.LENGTH_SHORT).show(); if (mConnectingDialog.isShowing()) { mConnectingDialog.dismiss(); } if (isConnect){ startActivity(new Intent(MainActivity.this, OperationActivity.class)); } } }); } }); mBtnStartScan = (Button) findViewById(R.id.btn_start_scan); mBtnStopScan = (Button) findViewById(R.id.btn_stop_scan); mRvDevicesList = (RecyclerView) findViewById(R.id.rv_devices); mConnectingDialog = new ProgressDialog(this); mConnectingDialog.setCancelable(true); mConnectingDialog.setMessage("加载中..."); mConnectingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { mBleManager.disconnect(); } }); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); mRvDevicesList.setLayoutManager(linearLayoutManager); mRecyclerAdapter = new BleDeviceAdapter(); mRvDevicesList.setAdapter(mRecyclerAdapter); //开始搜索 mBtnStartScan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startScan(); } }); //停止搜索 mBtnStopScan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopScan(); } }); } /** * 开始搜索 */ private void startScan(){ mBleManager.startScan(new ScanCallback() { @Override public void onDeviceFound(final List<BluetoothDevice> devices) { runOnUiThread(new Runnable() { @Override public void run() { mRecyclerAdapter.setDevices(devices); } }); } }); } /** * 停止搜索 */ private void stopScan(){ mBleManager.stopScan(); } private class BleDeviceAdapter extends RecyclerView.Adapter<BleDeviceAdapter.ViewHolder> { private List<BluetoothDevice> devices; private LayoutInflater mInflator; private Map<String, Integer> mDevicesRssi; public BleDeviceAdapter() { this.devices = new ArrayList<>(); this.mDevicesRssi = new HashMap<>(); this.mInflator = MainActivity.this.getLayoutInflater(); } private void setDevices(List<BluetoothDevice> devices) { this.devices = devices; notifyDataSetChanged(); } @Override public BleDeviceAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflator.inflate(R.layout.item_device, parent, false); BleDeviceAdapter.ViewHolder item = new BleDeviceAdapter.ViewHolder(view); return item; } @Override public void onBindViewHolder(BleDeviceAdapter.ViewHolder holder, final int position) { BleDeviceAdapter.ViewHolder viewHolder = ((BleDeviceAdapter.ViewHolder) holder); final BluetoothDevice device = devices.get(position); final String deviceName = device.getName(); if (deviceName != null && deviceName.length() > 0) viewHolder.deviceName.setText(deviceName); else viewHolder.deviceName.setText("Unknow"); viewHolder.deviceAddress.setText(device.getAddress()); viewHolder.content.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mBleManager.connect(device); mConnectingDialog.show(); } }); } @Override public int getItemCount() { return devices.size(); } class ViewHolder extends RecyclerView.ViewHolder { private LinearLayout content; private TextView deviceName; private TextView deviceAddress; public ViewHolder(View itemView) { super(itemView); content = ((LinearLayout) itemView.findViewById(R.id.content)); deviceAddress = ((TextView) itemView.findViewById(R.id.device_address)); deviceName = (TextView) itemView.findViewById(R.id.device_name); } } } }