Reputation: 121
public class DeviceScanActivity extends AppCompatActivity/*ListActivity*/ {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mHandler = new Handler();
//mSend=new BluetoothSendRecv(cntxt);
mActvty= this.getParent();
visible = this.getIntent();
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
// Use this check to determine whether BLE is supported on the device. Then you can
// selectively disable BLE-related features.
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
finish();
}
// Initializes a Bluetooth adapter. For API level 18 and above, get a reference to
// BluetoothAdapter through BluetoothManager.
mBluetoothManager =(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
// Checks if Bluetooth is supported on the device.
if (mBluetoothAdapter == null ) {
Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
finish();
return;
}
if( !mBluetoothAdapter.isEnabled())
{
Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 1);
}
if( !mBluetoothAdapter.isDiscovering()) {
Intent discoverableIntent =
new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
}
// Construct the data source
ArrayList<ViewHolder> arrayOfUsers = new ArrayList<ViewHolder>();
// Create the adapter to convert the array to views
adapter = new UsersAdapter(this, arrayOfUsers);
cntxt=this.getApplicationContext();
ListView listView = (ListView) findViewById(R.id.mobile_list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
ViewHolder entry= (ViewHolder) parent.getAdapter().getItem(position);
mAddress = entry.deviceAddress;
Toast.makeText(cntxt, mAddress, Toast.LENGTH_SHORT).show();
Intent i = new Intent(cntxt, BluetoothLeService.class);
cntxt.startService(i);
bindService(visible, mConnection, BIND_AUTO_CREATE);; //if checked, start service
//final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
//mBluetoothService.mBluetoothDeviceAddress=address;
//mBluetoothService.mBluetoothManager=mBluetoothManager;
//mBluetoothService.mBluetoothAdapter = mBluetoothAdapter;
//mBluetoothService.mBluetoothGatt.connect();
/*mBluetoothService.mBluetoothGatt = */
//mSend.mBluetoothGatt=device.connectGatt(mActvty/*cntxt*/, false, mSend.mGattCallback);
//mSend.mBluetoothDeviceAddress=address;
//mSend.mBluetoothManager=mBluetoothManager;
//mSend.mBluetoothAdapter = mBluetoothAdapter;
//mSend.mBluetoothGatt.connect();
//mBluetoothService.mBluetoothGatt=mBluetoothGatt;
//Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
}});
ViewHolder newUser2 = new ViewHolder("adtv2","vvg2");
adapter.add(newUser2);
}
ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
//Toast.makeText(Client.this, "Service is disconnected", 1000).show();
mBounded = false;
mBluetoothService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//Toast.makeText(Client.this, "Service is connected", 1000).show();
mBounded = true;
BluetoothLeService.LocalBinder mLocalBinder = (BluetoothLeService.LocalBinder)service;
Toast.makeText(cntxt, "Mithun", Toast.LENGTH_SHORT).show();
mBluetoothService = mLocalBinder.getService();
if (!mBluetoothService.initialize()) {
//Log.e(TAG, "Unable to initialize Bluetooth");
finish();
}
// Automatically connects to the device upon successful start-up
// initialization.
mBluetoothService.connect(mAddress);
}
};
first bluetooth manager is created.from that bluetooth adapter is created. Then RequestPermission is called.then scanLeDevice is called. Bluetooth scan is done for "period"seconds. The result is stored in ArrayList.Adapter is created for ArrayList and view.The result is displayed in list view. On clicking each item of list, onItemClick method is called.We get back the discovered device characteristics through adapter.Intentis createdfor service.to the service,mConnection method is passed. But onServiceConnected method isnot called as "Mithun " is not printed.
Upvotes: 2
Views: 298
Reputation: 21043
You have Messed up with Intent
. It should be .
Intent i = new Intent(cntxt, BluetoothLeService.class);
cntxt.startService(i);
bindService(i, mConnection, BIND_AUTO_CREATE);
Also if this Service
is serving the Activity
only, then you do not have to use startService()
. Bounded Service and Started Service are different. Read Bound services and make the decision whether you need a Started Service or a Bounded Service only. Whereas A service can be Started and bounded both. You can read about it more in the link above.
Upvotes: 2