fork download
  1. package com.example.chengforapp.myapplication;
  2.  
  3. import android.bluetooth.BluetoothAdapter;
  4. import android.bluetooth.BluetoothDevice;
  5. import android.os.Handler;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.os.Bundle;
  8. import android.widget.AdapterView;
  9. import android.widget.Button;
  10. import android.widget.Toast;
  11.  
  12. import java.io.IOException;
  13. import java.io.OutputStream;
  14. import java.util.UUID;
  15.  
  16. public class MainActivity extends AppCompatActivity {
  17.  
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. }
  23. }
  24. public class Trans_page extends AppCompatActivity{
  25. private Button button_paired ;
  26. private Button button_disconnect ;
  27. private Button button_find ;
  28. private TextView show_data ;
  29. private ListView event_listView;
  30. private TextView show_count ;
  31. private BluetoothAdapter mBluetoothAdapter ;
  32. private ArrayAdapter<String> deviceName ;
  33. private ArrayAdapter<String> deviceID ;
  34. private Set<BluetoothDevice> pairedDevices ;
  35. private String chooseID ;
  36. private BluetoothDevice bleDevice ;
  37. private BluetoothSocket bluesoccket ; // becareful
  38. private InputStream mmInputStream ;
  39. private OutputStream mmOutputStream ;
  40. Thread workerThread ;
  41. volatile boolean stopWorker ;
  42. private int readBufferPosition ;
  43. private byte[] readBuffer ;
  44. private String uid ;
  45. private int count ;
  46. private LocationManager locMgr ;
  47. private String bestProv ;
  48. @Override
  49. protected void onCreate(Bundle savedInstanceState){
  50. super.onCreate(savedInstanceState);
  51. setContentView(R.layout.activity_trans_page);
  52. getView();
  53. setListener();
  54. deviceName = new ArrayAdaapter<String>(this.android.R.layout.simple_expandable_list_item_1);
  55. deviceID = new ArrayAdapter<String>(this.android.R.layout.simple_expandable_list_item_1);
  56. count = 0;
  57. }
  58. private void getView(){
  59. button_paired = (Button)findViewById(R.id.btn_paired);
  60. button_disconnect=(Button)findViewById(R.id.btn_disconn);
  61. show_data = (TextView)findViewById(R.id.txtShow);
  62. event_listView=(ListView)findViewById(R.id.Show_B_List);
  63. button_find = (Button)findViewById(R.id.btn_conn);
  64. show_count = (TextView)findViewById(R.id.txt_count);
  65. }
  66. private void setListener(){
  67. button_paired.setOnClickListener(new Button.OnClickListener(){
  68. @Override
  69. public void onClick(View v){
  70. findPBT();
  71. }
  72. }) ;
  73. button_disconnect.setOnClickListener((v)->{
  74. try{
  75. closeBT();
  76. }catch(IOException e){
  77. e.printStackTrace();}
  78. });
  79. button_find.setOnClickListener(new Button.OnClickListener(){
  80. @Override
  81. public void onClick(View v){
  82. findPBT();
  83. }
  84. });
  85. event_listView.setAdapter(deviceName);
  86. event_listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
  87. @Override
  88. public void inItemClick(AdapterView<?> parent, View view , int position, long id){
  89. choseID=deviceID.getItem(position);
  90. try{
  91. openBT();
  92. }catch (IOException e){
  93. e.printStackTrace();
  94. }
  95. Toast.makeText(Trans_page.this,"選擇了:"+choseID, Toast.LENGTH_SHORT).show();
  96. deviceName.clear();
  97. }
  98. });
  99. }
  100. private void findPBT(){
  101. mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  102. if(mBluetoothAdapter != null){
  103. show_data.setText("No bluetooth adapter available");
  104. }
  105. if(!mBluetoothAdapter.isEnabled()){
  106. Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
  107. startActivityForResult(enableBluetooth,1);
  108. }
  109. pairedDevices=mBluetoothAdapter.getBondedDevices();
  110. if(pairedDevices.size()>0){
  111. for(BluetoothDevice device : pairedDevices){
  112. Stirng str ="已配對完成的裝置有"+device.getName()+" "+device.getAddress()+"\n";
  113. uid = device.getAddress();
  114. bleDevice = device ;
  115. }
  116. event_listView.setAdapter(deviceName);
  117. }
  118. }
  119. private void openBT() throws IOException{
  120. UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  121. if(bleDevice != null){
  122. bluesoccket = bleDevice.createRfcommSocketToServiceRecord(uuid);
  123.  
  124. bluesoccket.connect();
  125. mmOutputStream = bluesoccket.getOutputStream();
  126. mmInputStream = bluesoccket.getInputStream();
  127. beginListenForData();
  128. show_data.setText("Bluetooth Opened:"+bleDevice.getName()+""+bleDevice.getAddress());
  129. }
  130. }
  131. private void beginListenForData(){
  132. final Handler handler = new Handler();
  133. final byte delimiter = 10 ;
  134.  
  135. stopWorker = false ;
  136. readBufferPosition = 0 ;
  137. readBuffer = new byte[1024];
  138. workerThread = new Thread((Runnable)()->{
  139. while(!Thread.currentThread().isInterrupted()&&!stopWorker)
  140. {
  141. try{
  142. int bytesAvailable = mmInputStream.available();
  143. if(bytesAvailable>0)
  144. {
  145. byte[] packetBytes = new byte[bytesAvailable];
  146. mmInputStream.read(packetBytes);
  147. for(int i = 0;i<bytesAvailable ; i++){
  148. byte b = packetBytes[i];
  149. if(b==delimiter){
  150. byte[] encodedBytes = new byte[readBufferPosition];
  151. System.arraycopy(readBuffer,0,encodedBytes,0,encodedBytes.length);
  152. final String data = new String(encodedBytes,"US-ASCII");
  153. readBufferPosition = 0;
  154. count++;
  155. handler.post(()->{
  156. String prevString = show_data.getText().toString();
  157. String dataText = String.format("%s\nCF=1,PM2.5=%sug/m3,收到了第%s筆資料",prevString,data,count);
  158. show_data.setText(dataText);
  159. });
  160. }else
  161. {
  162. readBuffer[readBufferPosition++]=b;
  163. }
  164. }
  165. }
  166. } catch (IOException ex){
  167. stopWorker = true ;
  168. }
  169. }
  170. });
  171. }
  172. private void closeBT() throws IOException{
  173. stopWorker = true ;
  174. mmOutputStream.close();
  175. mmInputStream.close();
  176. bluesoccket.clsoe();
  177. deviceName.clear();
  178. show_count.setText("");
  179. show_data.setText("Bluetooth Closed");
  180. }
  181. }
  182.  
Success #stdin #stdout 0.09s 27896KB
stdin
Standard input is empty
stdout
Standard output is empty