java - How to switch between activities with the same bluetooth connection address, how to do that? -
i have 3 activities:
devicelistactivity: lists out paired device list , after clicking on 1 paired device switches mainactivity
.
mainactivity: receives bluetooth address , initiates connection bluetoothsocket
, starts thread receive text arduino, after switch thread mainactivity
addactivity2
same connection. have same program mainactivity
in addactivity2
too.
main issue: want stop running thread of mainactivity
while switching mainactivity
addactivity2
, start thread of addactivity2
. how ??
*big issue facing: switching between 2 activities (mainactivity
, addactivity2
) same address. issue lies in threads.
here's devicelistactivity
public class devicelistactivity extends activity { private static final string tag = "devicelistactivity"; private static final boolean d = true; // string send on mainactivity public static string extra_device_address = "device_address"; private bluetoothadapter mbtadapter; private arrayadapter<string> mpaireddevicesarrayadapter; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.device_list); } protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.device_list); } public void onresume() { super.onresume(); checkbtstate(); textview1 = (textview) findviewbyid(r.id.connecting); textview1.settextsize(40); textview1.settext(" "); // initialize array adapter paired devices mpaireddevicesarrayadapter = new arrayadapter<string>(this, r.layout.device_name); // find , set listview paired devices listview pairedlistview = (listview) findviewbyid(r.id.paired_devices); pairedlistview.setadapter(mpaireddevicesarrayadapter); pairedlistview.setonitemclicklistener(mdeviceclicklistener); // local bluetooth adapter mbtadapter = bluetoothadapter.getdefaultadapter(); // set of paired devices , append 'paireddevices' set<bluetoothdevice> paireddevices = mbtadapter.getbondeddevices(); // add previosuly paired devices array if (paireddevices.size() > 0) { findviewbyid(r.id.title_paired_devices).setvisibility(view.visible);//make title viewable (bluetoothdevice device : paireddevices) { mpaireddevicesarrayadapter.add(device.getname() + "\n" + device.getaddress()); } } else { string nodevices = getresources().gettext(r.string.none_paired).tostring(); mpaireddevicesarrayadapter.add(nodevices); } } // set on-click listener list (nicked - unsure) private adapterview.onitemclicklistener mdeviceclicklistener = new adapterview.onitemclicklistener() { public void onitemclick(adapterview<?> av, view v, int arg2, long arg3) { textview1.settext("connecting..."); // device mac address, last 17 chars in view string info = ((textview) v).gettext().tostring(); string address = info.substring(info.length() - 17); // make intent start next activity while taking mac address. intent = new intent(devicelistactivity.this, mainactivity.class); i.putextra(extra_device_address, address); startactivity(i); } }; private void checkbtstate() { // check device has bluetooth , turned on mbtadapter=bluetoothadapter.getdefaultadapter(); // check out works!!! if(mbtadapter==null) { toast.maketext(getbasecontext(), "device not support bluetooth", toast.length_short).show(); } else { if (mbtadapter.isenabled()) { log.d(tag, "...bluetooth on..."); } else { //prompt user turn on bluetooth intent enablebtintent = new intent(bluetoothadapter.action_request_enable); startactivityforresult(enablebtintent, 1); } } } }
here's mainactivity
, receives string arduino
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate) bluetoothin = new handler() { public void handlemessage(android.os.message msg) { if (msg.what == handlerstate) { //if message want string readmessage = (string) msg.obj; // msg.arg1 = bytes connect thread recdatastring.append(readmessage); //keep appending string until ~ int endoflineindex = recdatastring.indexof("~"); // determine end-of-line if (endoflineindex > 0) { // make sure there data before ~ string datainprint = recdatastring.substring(0, endoflineindex); // extract string txtstring.settext("data received = " + datainprint); int datalength = datainprint.length(); //get length of data received txtstringlength.settext("string length = " + string.valueof(datalength)); if (recdatastring.charat(0) == '#') //if starts # know looking { string sensor0 = recdatastring.substring(1, 5); //get sensor value string between indices 1-5 sensorview0.settext(" humidity = " + sensor0 + "%"); //update textviews sensor values } recdatastring.delete(0, recdatastring.length()); //clear string data // strincom =" "; datainprint = " "; } } } }; btadapter = bluetoothadapter.getdefaultadapter(); // bluetooth adapter checkbtstate(); } private bluetoothsocket createbluetoothsocket(bluetoothdevice device) throws ioexception { return device.createrfcommsockettoservicerecord(btmoduleuuid); //creates secure outgoing connecetion bt device using uuid } @override synchronized public void onresume() { super.onresume(); //get mac address devicelistactivity via intent intent intent = getintent(); //get mac address devicelistactivty via address = intent.getstringextra(devicelistactivity.extra_device_address); //create device , set mac address bluetoothdevice device = btadapter.getremotedevice(address); try { btsocket = createbluetoothsocket(device); } catch (ioexception e) { toast.maketext(getapplicationcontext(), "socket creation failed", toast.length_long).show(); } // establish bluetooth socket connection. try { btsocket.connect(); } catch (ioexception e) { try { btsocket.close(); } catch (ioexception e2) { //insert code deal } } mconnectedthread = new connectedthread(btsocket); mconnectedthread.start(); } }
inner thread
class receives string
inside mainactivity
class connectedthread extends thread { private final inputstream mminstream; private final outputstream mmoutstream; //creation of connect thread public connectedthread(bluetoothsocket socket) { inputstream tmpin = null; outputstream tmpout = null; try { //create i/o streams connection tmpin = socket.getinputstream(); tmpout = socket.getoutputstream(); } catch (ioexception e) { } mminstream = tmpin; mmoutstream = tmpout; } public void run() { byte[] buffer = new byte[256]; int bytes; // keep looping listen received messages while (true) { try { bytes = mminstream.read(buffer); //read bytes input buffer string readmessage = new string(buffer, 0, bytes); // send obtained bytes ui activity via handler bluetoothin.obtainmessage(handlerstate, bytes, -1, readmessage).sendtotarget(); } catch (ioexception e) { break; } } } //write method public void write(string input) { byte[] msgbuffer = input.getbytes(); //converts entered string bytes try { mmoutstream.write(msgbuffer); //write bytes on bt connection via outstream } catch (ioexception e) { //if cannot write, close application toast.maketext(getbasecontext(), "connection failure", toast.length_long).show(); finish(); } } }
another activity
same mainactivity
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate) bluetoothin = new handler() { public void handlemessage(android.os.message msg) { if (msg.what == handlerstate) { //if message want string readmessage = (string) msg.obj; // msg.arg1 = bytes connect thread recdatastring.append(readmessage); //keep appending string until ~ int endoflineindex = recdatastring.indexof("~"); // determine end-of-line if (endoflineindex > 0) { // make sure there data before ~ string datainprint = recdatastring.substring(0, endoflineindex); // extract string txtstring.settext("data received = " + datainprint); int datalength = datainprint.length(); //get length of data received txtstringlength.settext("string length = " + string.valueof(datalength)); if (recdatastring.charat(0) == '#') //if starts # know looking { string sensor0 = recdatastring.substring(1, 5); //get sensor value string between indices 1-5 sensorview0.settext(" humidity = " + sensor0 + "%"); //update textviews sensor values } recdatastring.delete(0, recdatastring.length()); //clear string data // strincom =" "; datainprint = " "; } } } }; runonuithread(new runnable() { @override synchronized public void run() { btadapter = bluetoothadapter.getdefaultadapter(); // bluetooth adapter checkbtstate(); toast.maketext(getapplicationcontext(),mainactivity.address2,toast.length_short).show(); device=btadapter.getremotedevice(mainactivity.address2); } }); btadapter = bluetoothadapter.getdefaultadapter(); // bluetooth adapter checkbtstate(); } private bluetoothsocket createbluetoothsocket(bluetoothdevice device) throws ioexception { return device.createrfcommsockettoservicerecord(btmoduleuuid); //creates secure outgoing connecetion bt device using uuid } @override synchronized public void onresume() { super.onresume(); //get mac address devicelistactivity via intent intent intent = getintent(); //get mac address devicelistactivty via address = intent.getstringextra(devicelistactivity.extra_device_address); //create device , set mac address bluetoothdevice device = btadapter.getremotedevice(address); try { btsocket = createbluetoothsocket(device); } catch (ioexception e) { toast.maketext(getapplicationcontext(), "socket creation failed", toast.length_long).show(); } // establish bluetooth socket connection. try { btsocket.connect(); } catch (ioexception e) { try { btsocket.close(); } catch (ioexception e2) { //insert code deal } } mconnectedthread = new connectedthread(btsocket); mconnectedthread.start(); } }
Comments
Post a Comment