vendredi 8 janvier 2016

how to Insert Beacon Name to the Database?

I need to extract BLE device name and put in a table in sqlite. I have used google sample code and modified it to get my aim. all parts work exept puting BLE device name in the table. I can Toast the device name which means the method works, but I dont know where should I put the Insert command: to insert device name to the table.

myDb.insertData("1",device.getName(),date);

this is my scan activity

package com.example.android.bluetoothlegatt;


public class DeviceScanActivity extends ListActivity {

DatabaseHelper myDb;
//String beaconName;
String date = new SimpleDateFormat("ddMMyyHHmmss").format(new Date());


private LeDeviceListAdapter mLeDeviceListAdapter;
private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;

private static final int REQUEST_ENABLE_BT = 1;

private static final long SCAN_PERIOD = 50000;

 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setTitle(R.string.title_devices);
mHandler = new Handler();
myDb=new DatabaseHelper(this);

myDb.insertData("1", getName() , date);

if    (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
finish();
}



final BluetoothManager bluetoothManager =
        (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();

if (mBluetoothAdapter == null) {
        Toast.makeText(this, R.string.error_bluetooth_not_supported,              Toast.LENGTH_SHORT).show();
    finish();
    return;
 }


 }




 @Override
 public boolean onCreateOptionsMenu(Menu menu) {

 getMenuInflater().inflate(R.menu.main, menu);
 if (!mScanning) {
    menu.findItem(R.id.menu_stop).setVisible(false);
    menu.findItem(R.id.menu_scan).setVisible(true);
    menu.findItem(R.id.menu_refresh).setActionView(null);
 } else {
    menu.findItem(R.id.menu_stop).setVisible(true);
    menu.findItem(R.id.menu_scan).setVisible(false);
    menu.findItem(R.id.menu_refresh).setActionView(
            R.layout.actionbar_indeterminate_progress);
 }
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
 switch (item.getItemId()) {
    case R.id.menu_scan:
        mLeDeviceListAdapter.clear();
        scanLeDevice(true);
        break;
    case R.id.menu_stop:
        scanLeDevice(false);
        break;
}
return true;
}

@Override
protected void onResume() {
super.onResume();

currently enabled,
permission to enable it.
if (!mBluetoothAdapter.isEnabled()) {
    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new  Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
 }


 mLeDeviceListAdapter = new LeDeviceListAdapter();
setListAdapter(mLeDeviceListAdapter);
scanLeDevice(true);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)     {

 if (requestCode == REQUEST_ENABLE_BT && resultCode == Activity.RESULT_CANCELED) {
    finish();
    return;
}
super.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onPause() {
super.onPause();
scanLeDevice(false);
mLeDeviceListAdapter.clear();
}





@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

final BluetoothDevice device = mLeDeviceListAdapter.getDevice(position);
if (device == null) return;
final Intent intent = new Intent(this, DeviceControlActivity.class);
intent.putExtra(DeviceControlActivity.EXTRAS_DEVICE_NAME, device.getName());
intent.putExtra(DeviceControlActivity.EXTRAS_DEVICE_ADDRESS,  device.getAddress());



if (mScanning) {
    mBluetoothAdapter.stopLeScan(mLeScanCallback);
    mScanning = false;
}
startActivity(intent);
}

private void scanLeDevice(final boolean enable) {
if (enable) {
    // Stops scanning after a pre-defined scan period.
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
            invalidateOptionsMenu();
        }
    }, SCAN_PERIOD);

    mScanning = true;
    mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
    mScanning = false;
    mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
invalidateOptionsMenu();
}


private class LeDeviceListAdapter extends BaseAdapter {
private ArrayList<BluetoothDevice> mLeDevices;
private LayoutInflater mInflator;

public LeDeviceListAdapter() {
    super();
    mLeDevices = new ArrayList<BluetoothDevice>();
    mInflator = DeviceScanActivity.this.getLayoutInflater();
}

public void addDevice(BluetoothDevice device) {
    if(!mLeDevices.contains(device)) {
        mLeDevices.add(device);
    }
}

public BluetoothDevice getDevice(int position) {
    return mLeDevices.get(position);
}

public void clear() {
    mLeDevices.clear();
}

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

@Override
public Object getItem(int i) {
    return mLeDevices.get(i);
}

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

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

    ViewHolder viewHolder;

    if (view == null) {
        view = mInflator.inflate(R.layout.listitem_device, null);
        viewHolder = new ViewHolder();
        viewHolder.deviceAddress = (TextView)  view.findViewById(R.id.device_address);
        viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
        view.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) view.getTag();
    }

    BluetoothDevice device = mLeDevices.get(i);
    final String deviceName = device.getName();
    if (deviceName != null && deviceName.length() > 0)
        viewHolder.deviceName.setText(deviceName);
    else
        viewHolder.deviceName.setText(R.string.unknown_device);
    viewHolder.deviceAddress.setText(device.getAddress());


    return view;
}

}


private BluetoothAdapter.LeScanCallback mLeScanCallback =
    new BluetoothAdapter.LeScanCallback() {

@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[]   scanRecord) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mLeDeviceListAdapter.addDevice(device);
            mLeDeviceListAdapter.notifyDataSetChanged();
        }
    });
}
};

static class ViewHolder {
TextView deviceName;
TextView deviceAddress;
}
}

this is the DATAHELPER

package com.example.android.bluetoothlegatt;



public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="mydb.db";
public static final String TABLE_NAME="mytable";
public static final String COL_1="MobileID";
public static final String COL_2="DeviceName";
public static final String COL_3="Time";

public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1); 

}



@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + "(MobileID TEXT, DeviceName TEXT,  Time TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST "+TABLE_NAME);
onCreate(db);
 }

 public boolean insertData(String mobileid, String devicename, String time)
{
SQLiteDatabase db= this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(COL_1,mobileid);
contentValues.put(COL_2,devicename);
contentValues.put(COL_3,time);
long result=db.insert(TABLE_NAME,null,contentValues);
if(result==-1)
    return false;
else
    return true;
 }

   }

Aucun commentaire:

Enregistrer un commentaire