Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
#1

Снова Bluetooth - Программирование Android

05.10.2013, 16:44. Просмотров 1652. Ответов 2
Метки нет (Все метки)

Здравствуйте. Подскажите пожалуйста почему к простой нокии х2 например подключаюсь запросто, а к Android`у или к ПК не могу ошибка вылазиет. Вот код подозреваю из-за UUID, но фиг его знает
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package com.example.conpc;
 
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
 
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.bluetooth.*;
import android.content.Intent;
 
public class MainActivity extends Activity {
    
    ToggleButton btn;
    BluetoothAdapter btAdapter = null;
        // Ни так ни так не работает
    public static UUID My_UUID = UUID.randomUUID();//UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    public static String adress = "F4:E5:43:34:67:A3";
    BluetoothSocket mSocket = null;
    private static final String TAG = "bluetooth1";
    private OutputStream outStream = null;  
    private static final int REQUEST_ENABLE_BT = 1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (ToggleButton) findViewById(R.id.btn_en);
        btAdapter = BluetoothAdapter.getDefaultAdapter();
        checkBTState();
        
        btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    sendData("1");
                    Toast.makeText(getBaseContext(), "Включаем LED", Toast.LENGTH_SHORT).show();
                } else {
                    sendData("0");
                    Toast.makeText(getBaseContext(), "Выключаем LED", Toast.LENGTH_SHORT).show();
                }
            }
        });
        
    }
    
    @Override
    public void onResume() {
      super.onResume();
         
      Log.d(TAG, "...onResume - попытка соединения...");
      
      // Set up a pointer to the remote node using it's address.
      BluetoothDevice device = btAdapter.getRemoteDevice(adress);
      
      
      // Two things are needed to make a connection:
      //   A MAC address, which we got above.
      //   A Service ID or UUID.  In this case we are using the
      //     UUID for SPP.
      try {
        mSocket = device.createRfcommSocketToServiceRecord(My_UUID);
      } catch (IOException e) {
        errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
      }
      
      // Discovery is resource intensive.  Make sure it isn't going on
      // when you attempt to connect and pass your message.
      btAdapter.cancelDiscovery();
      
      // Establish the connection.  This will block until it connects.
      Log.d(TAG, "...Соединяемся...");
      try {
        mSocket.connect();
        Log.d(TAG, "...Соединение установлено и готово к передачи данных...");
      } catch (IOException e) {
        try {
          mSocket.close();
        } catch (IOException e2) {
          errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
        }
      }
        
      // Create a data stream so we can talk to server.
      Log.d(TAG, "...Создание Socket...");
    
      try {
        outStream = mSocket.getOutputStream();
      } catch (IOException e) {
        errorExit("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + ".");
      }
    }
    
    @Override
    public void onPause() {
      super.onPause();
    
      Log.d(TAG, "...In onPause()...");
    
      if (outStream != null) {
        try {
          outStream.flush();
        } catch (IOException e) {
          errorExit("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + ".");
        }
      }
    
      try     {
        mSocket.close();
      } catch (IOException e2) {
        errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
      }
    }
      
    private void checkBTState() {
      // Check for Bluetooth support and then check to make sure it is turned on
      // Emulator doesn't support Bluetooth and will return null
      if(btAdapter==null) { 
        errorExit("Fatal Error", "Bluetooth не поддерживается");
      } else {
        if (btAdapter.isEnabled()) {
          Log.d(TAG, "...Bluetooth включен...");
        } else {
          //Prompt user to turn on Bluetooth
          Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
          startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        }
      }
    }
 
    private void errorExit(String title, String message){
        Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
        finish();
      }
    
    private void sendData(String message) {
        byte[] msgBuffer = message.getBytes();
      
        Log.d(TAG, "...Посылаем данные: " + message + "...");
      
        try {
          outStream.write(msgBuffer);
        } catch (IOException e) {
          String msg = "In onResume() and an exception occurred during write: " + e.getMessage();
          if (adress.equals("00:00:00:00:00:00")) 
            msg = msg + ".\n\nВ переменной address у вас прописан 00:00:00:00:00:00, вам необходимо прописать реальный MAC-адрес Bluetooth модуля";
            msg = msg +  ".\n\nПроверьте поддержку SPP UUID: " + My_UUID.toString() + " на Bluetooth модуле, к которому вы подключаетесь.\n\n";
            
            errorExit("Fatal Error", msg);       
        }
      }
    
}
Вот лог:
Кликните здесь для просмотра всего текста
10-04 21:01:30.070: D/dalvikvm(1627): Late-enabling CheckJNI
10-04 21:01:30.140: E/Trace(1627): error opening trace file: No such file or directory (2)
10-04 21:01:30.150: D/ActivityThread(1627): setTargetHeapUtilization:0.25
10-04 21:01:30.150: D/ActivityThread(1627): setTargetHeapIdealFree:8388608
10-04 21:01:30.150: D/ActivityThread(1627): setTargetHeapConcurrentStart:2097152
10-04 21:01:30.230: D/bluetooth1(1627): ...Bluetooth включен...
10-04 21:01:30.230: D/bluetooth1(1627): ...onResume - попытка соединения...
10-04 21:01:30.230: I/BluetoothSocket.cpp(1627): Setting Master socket option
10-04 21:01:30.240: D/bluetooth1(1627): ...Соединяемся...
10-04 21:01:42.240: D/bluetooth1(1627): ...Создание Socket...
10-04 21:01:42.310: D/libEGL(1627): loaded /system/lib/egl/libEGL_adreno200.so
10-04 21:01:42.310: D/libEGL(1627): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
10-04 21:01:42.310: D/libEGL(1627): loaded /system/lib/egl/libGLESv2_adreno200.so
10-04 21:01:42.320: I/Adreno200-EGL(1627): <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: (Merge)
10-04 21:01:42.320: I/Adreno200-EGL(1627): Build Date: 07/09/13 Tue
10-04 21:01:42.320: I/Adreno200-EGL(1627): Local Branch: AU_41
10-04 21:01:42.320: I/Adreno200-EGL(1627): Remote Branch:
10-04 21:01:42.320: I/Adreno200-EGL(1627): Local Patches:
10-04 21:01:42.320: I/Adreno200-EGL(1627): Reconstruct Branch:
10-04 21:01:42.350: D/OpenGLRenderer(1627): Enabling debug mode 0
10-04 21:01:44.760: D/bluetooth1(1627): ...Посылаем данные: 1...
10-04 21:01:44.780: E/BluetoothSocket(1627): java.io.IOException: socket closed
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:398)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.bluetooth.BluetoothOutputStream.write(BluetoothOutputStream.java:89)
10-04 21:01:44.780: E/BluetoothSocket(1627): at java.io.OutputStream.write(OutputStream.java:82)
10-04 21:01:44.780: E/BluetoothSocket(1627): at com.example.conpc.MainActivity.sendData(MainActivity.java:145)
10-04 21:01:44.780: E/BluetoothSocket(1627): at com.example.conpc.MainActivity.access$0(MainActivity.java:139)
10-04 21:01:44.780: E/BluetoothSocket(1627): at com.example.conpc.MainActivity$1.onCheckedChanged(MainActivity.java:39)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.widget.CompoundButton.setChecked(CompoundButton.java:130)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.widget.ToggleButton.setChecked(ToggleButton.java:73)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.widget.CompoundButton.toggle(CompoundButton.java:91)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.widget.CompoundButton.performClick(CompoundButton.java:103)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.view.View$PerformClick.run(View.java:17161)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.os.Handler.handleCallback(Handler.java:615)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.os.Looper.loop(Looper.java:213)
10-04 21:01:44.780: E/BluetoothSocket(1627): at android.app.ActivityThread.main(ActivityThread.java:4787)
10-04 21:01:44.780: E/BluetoothSocket(1627): at java.lang.reflect.Method.invokeNative(Native Method)
10-04 21:01:44.780: E/BluetoothSocket(1627): at java.lang.reflect.Method.invoke(Method.java:511)
10-04 21:01:44.780: E/BluetoothSocket(1627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
10-04 21:01:44.780: E/BluetoothSocket(1627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
10-04 21:01:44.780: E/BluetoothSocket(1627): at dalvik.system.NativeStart.main(Native Method)
10-04 21:01:44.850: D/bluetooth1(1627): ...In onPause()...


Добавлено через 21 час 42 минуты
Тема еще актуальна, друзья помогайте.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 16:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Снова Bluetooth (Программирование Android):

Bluetooth - Программирование Android
Здравствуйте написал вот что package com.example.fdsafdfa; import java.io.OutputStream; import android.os.Bundle; import...

Работа с bluetooth - Программирование Android
Доброго всем вечера. Я начинающий Android Разработчик. Перечитав немало информации, так и не сложилась до конца картина, как...

Bluetooth- приложение - Программирование Android
Приложение устанавливается на телефон, при запуске вылетает с надписью: &quot;В приложение произошла ошибка&quot; в чем может быть проблема. Версия...

Android + PC + bluetooth - Программирование Android
Где и как можно написать такую связку приложений -&gt; на компьютере сервер на андроид устройстве клиент как послать с андроида на пк...

Bluetooth Broadastreceiver - Программирование Android
Привет всем. У меня возникла одна проблема. Я программирую Bluetooth приложения и я завис на Broadcastreceiver. Проблема в том...

Bluetooth + Android - Программирование Android
Здравствуйте! Начал я относительно недавно изучать Eclipse. Мне необходимо принять сообщение, передаваемое с блютуз модуля, на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
05.10.2013, 20:05 #2
вот грязный хак, может поможет:
http://stackoverflow.com/a/18786701
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
06.10.2013, 20:28  [ТС] #3
Netscape, который раз Вы меня выручаете спасибо. Сейчас попробую

Добавлено через 1 час 10 минут
Цитата Сообщение от Netscape Посмотреть сообщение
вот грязный хак, может поможет:
http://stackoverflow.com/a/18786701
Огромное кол-во ошибок некоторые исправил, но все равно не понимаю многого может подскажите как мой простенький код исправить или вот еще проще нашел
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.example.gbfsgbg;
 
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
 
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
 
public class MainActivity extends Activity {
    
    BluetoothDevice device;
    BluetoothAdapter tmp;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ConnectedThread mConnectedThread = new ConnectedThread();
        mConnectedThread.start();
        mConnectedThread.write("48"); 
    }
    
    class ConnectedThread extends Thread{
         
        BluetoothAdapter bluetooth1;
        private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
        
        BluetoothSocket clientSocket;
        
        private  BluetoothSocket mmSocket;
        private OutputStream mmOutStream;
        OutputStream tmpOut = null;
     
            private static final String TAG = "bluetooth1";
        public ConnectedThread()
        {
            bluetooth1 = BluetoothAdapter.getDefaultAdapter();
             bluetooth1.enable();
            BluetoothDevice device = bluetooth1.getRemoteDevice("F4:E5:43:34:67:A3");
        
          try {
              mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
            } catch (IOException e) {
                Log.d(TAG, "Не создал");
            }
          bluetooth1.cancelDiscovery();
        
           try
           {
            mmSocket.connect();  
           }
           catch(IOException e)
           {Log.d(TAG, "Не подключено");}
           try {
               tmpOut = mmSocket.getOutputStream();
             
           } catch (IOException e) { }
           mmOutStream = tmpOut;
       }
        public void write(String message) {
                Log.d(TAG, "...Данные для отправки: " + message + "...");
             byte[] msgBuffer = message.getBytes();
                try {
                    mmOutStream.write(msgBuffer);
                } 
                catch (IOException e) {
                    Log.d(TAG, "...Ошибка отправки данных: " + e.getMessage() + "...");     
                  }
                }
                 }
 
}
Добавлено через 1 час 48 минут
Решил сделать по другому в общем скачал библиотеку nrComm для Delphi сделал прогу которая подключается к моему android`у. Как мне теперь сделать чтобы при нажатии на кнопку я посылал сигнал на подключенное устройство, т.е. на мой комп??? Это же должно быть легче или я опять что-то не соображаю? Заранее спасибо за любую помощь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2013, 20:28
Привет! Вот еще темы с ответами:

Bluetooth кнопка - Программирование Android
Здравствуйте , необходимо реализовать Bluetooth кнопку Arduino ---&gt; Android . Т.е. жмем кнопку на МК --&gt; МК формирует данные и отсылает по...

Bluetooth-чат - Программирование Android
Добрый день форумчане! Решил задаться вопросом написать приложение которое будет позволять обмениваться сообщениями через Bluetooth канал....

Проверка подключения по bluetooth - Программирование Android
Не подскажите, как можно проверять активно ли подключение по bluetooth? У меня есть два устройства, связь между ними устанавливается без...

Передача данных по Bluetooth - Программирование Android
Проблема в следующем, после определенного количества переданных байт(зависит от телефона, на huawei ~ 500, на nexus 4 ~ 1700) от Андроида...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru