[求助!!!]Ble4.0的一段代码

昵称算了吧 2013-06-30 09:43:16
各位大虾,最近在做sunsang ble 4.0的一段代码,功能是在这个activity之下自动找到距离最近的ble设备并返回给另一activity,可是在测试时,就一直卡在这个侦测的activity无法跳回,求帮助!

public class DeviceListActivity extends Activity {
private BluetoothAdapter mBtAdapter;
private TextView mEmptyList;
public static final String TAG = "DeviceListActivity";
private BleService mService = null;
private ArrayList<BluetoothDevice> deviceList;//外设列表
private DeviceAdapter deviceAdapter;
private ServiceConnection onService = null;
Map<String, Integer> addedDev;
Map<String, Integer> devRssiValues;
//已在屏幕上显示过的设备
BluetoothDevice closeDevice = null;
int minirssi = -55;


private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
// Gatt device found message.
case BleService.GATT_DEVICE_FOUND_MSG:
Bundle data = msg.getData();
final BluetoothDevice device = data.getParcelable(BluetoothDevice.EXTRA_DEVICE);
final int rssi = data.getInt(BleService.EXTRA_RSSI);
runOnUiThread(new Runnable() {
@Override
public void run() {
for(int i=0;i<12;i++)
{

addDevice(device, rssi);
ClosestDetecter(device,rssi,i);

}
}

});
break;
default:
super.handleMessage(msg);
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_wait);
Log.d(TAG, "onCreate");
mBtAdapter = BluetoothAdapter.getDefaultAdapter();


//getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
//setContentView(R.layout.device_list);

onService = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder rawBinder) {
mService = ((BleService.LocalBinder) rawBinder).getService();
if (mService != null) {
mService.setDeviceListHandler(mHandler);
}
populateList();

}

public void onServiceDisconnected(ComponentName classname) {
mService = null;
}
};

// start service, if not already running (but it is)
startService(new Intent(this, BleService.class));
Intent bindIntent = new Intent(this, BleService.class);
bindService(bindIntent, onService, Context.BIND_AUTO_CREATE);

mBtAdapter = BluetoothAdapter.getDefaultAdapter();
//mEmptyList = (TextView) findViewById(R.id.empty);
//Button cancelButton = (Button) findViewById(R.id.btn_cancel);
/* cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});*/
}





private void populateList() {
/* Initialize device list container */
Log.d(TAG, "populateList");

deviceList = new ArrayList<BluetoothDevice>();
deviceAdapter = new DeviceAdapter(this, deviceList);
devRssiValues = new HashMap<String, Integer>();
//ListView newDevicesListView = (ListView) findViewById(R.id.new_devices);
//newDevicesListView.setAdapter(deviceAdapter);
//newDevicesListView.setOnItemClickListener(mDeviceClickListener);

//已配对的蓝牙设备
Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();
for (BluetoothDevice pairedDevice : pairedDevices) {
boolean result = false;
result = mService.isBLEDevice(pairedDevice);
if (result == true) {
addDevice(pairedDevice, 0);
}
}
mService.scan(true);

}

//在程序初始化时先添加设备,populatelist的作用就是避免重复
private void addDevice(BluetoothDevice device, int rssi) {
boolean deviceFound = false;

for (BluetoothDevice listDev : deviceList) {
if (listDev.getAddress().equals(device.getAddress())) {
deviceFound = true;
break;
}
}
devRssiValues.put(device.getAddress(), rssi);
if (!deviceFound) {
//mEmptyList.setVisibility(View.GONE);
deviceList.add(device);
deviceAdapter.notifyDataSetChanged();
}
//closeDevice = CloseDetecter(deviceList);

}

private void ClosestDetecter(BluetoothDevice device, int rssi, int i) {
// TODO Auto-generated method stub
//addedDev.put(device.getAddress(), rssi);
if(rssi < minirssi)
{
minirssi = rssi;
closeDevice = device;
if(i == 11)
{
mService.scan(false);
addedDev.put(closeDevice.getAddress(), minirssi);



//传入状态


Bundle b = new Bundle();
b.putString(BluetoothDevice.EXTRA_DEVICE, closeDevice.getAddress());
b.putInt(BluetoothDevice.EXTRA_RSSI, minirssi);

Intent result = new Intent();
result.putExtras(b);

setResult(Activity.RESULT_OK, result);
finish();
// Intent intent = new Intent(this, FragMent1.class);
//startActivity(intent);


}
}

}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart mService= " + mService);

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
this.registerReceiver(mReceiver, filter);

}

@Override
public void onStop() {
super.onStop();
unregisterReceiver(mReceiver);
}

@Override
protected void onDestroy() {
super.onDestroy();
unbindService(onService);
mService.scan(false);
}



/**
* The BroadcastReceiver that listens for discovered devices and changes the
* title when discovery is finished.
*/
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();

if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
setProgressBarIndeterminateVisibility(false);
setTitle("select device");
if (deviceList.size() == 0) {
mEmptyList.setText("No devices");
}
}
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
if (!mBtAdapter.isEnabled())
finish();
}
}
};

static class ViewHolder
{
public ImageView img;
public TextView title;
public TextView info;
}

class DeviceAdapter extends BaseAdapter {
Context context;
List<BluetoothDevice> devices;
LayoutInflater inflater;
ViewHolder holder;

public DeviceAdapter(Context context, List<BluetoothDevice> devices) {
this.context = context;
inflater = LayoutInflater.from(context);
this.devices = devices;
}

@Override
public int getCount() {
return devices.size();
}

@Override
public Object getItem(int position) {
return devices.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int arg0, View convertView, ViewGroup parent) {

return null;
}



}
private void showMessage(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
...全文
69 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧