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

BluetoothAdapter - теряется объект после блокировки/выключения экрана - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как в Canvas взять значение Preference из Engine? http://www.cyberforum.ru/android-dev/thread1263079.html
LiveWallpaperService.java public class SampleEngine extends Engine implements SharedPreferences.OnSharedPreferenceChangeListener { private LiveWallpaperPainting painting; private SharedPreferences prefs; SampleEngine() { SurfaceHolder holder = getSurfaceHolder(); prefs =...
Программирование Android Тема для дипломной работы Скоро уже нужно определиться с темой для бакалаврской работы,хотелось бы какое нибудь приложенице под android написать, но в голову ничего путного не лезет, может у кого есть какие нибудь идеи на этот счет, буду благодарен... http://www.cyberforum.ru/android-dev/thread1263014.html
Программирование Android Как сделать, чтобы данные, введенные в EditText, сохранялись и пополнялись в новом активити?
как сделать что бы данные введенные в EditText сохранялись и пополнялись в новом активити... Идея такая: вводим текст в edittext нажимаем кнопку и данные сохраняются и выводятся в новом активити, последующие вводы в EditText добавляют новое активити, вообщем должно получиться что то вроде списка комментариев...нашел здесь (http://androiddocs.ru/…-dannyx-v-nastrojkax/) пример с использованием...
Программирование Android Куда бы выбросить Яндекс-карты?
Привет! Понимаю, что здесь не любят отвечать по теме Яндекс-карт, но всё равно поделюсь. Может, кто одумается. Многие знают, что развитие этого творения закончилось 2 года назад. Я мучался с ними некоторое время, смог за 2 дня подключить, с тех пор особых проблем не было. Плохо и то, что документация по ним отсутствует. Соответственно, приходится читать, как люди обходили ошибки. И вот, когда...
Программирование Android Put / Get Extra http://www.cyberforum.ru/android-dev/thread1262856.html
A1.class Intent in = new Intent(a1.this, a2.class); startActivity(a2); Toast.makeText(getBaseContext(), Integer.toString(i), Toast.LENGTH_SHORT).show(); in.putExtra("day", i); Здесь Toast показывает нужный int. Например 2. A2.class
Программирование Android При нажатии на текстовое поле открыть экран набора с телефоном из поля Всем привет, такой вопрос, есть текстовое поле с номером телефона, как сделать, чтобы при нажатие на это поле открывался экран набора с телефоном из поля, спасибо! подробнее

Показать сообщение отдельно
St@nton
3 / 3 / 0
Регистрация: 04.01.2013
Сообщений: 72

BluetoothAdapter - теряется объект после блокировки/выключения экрана - Программирование Android

26.09.2014, 02:43. Просмотров 460. Ответов 0
Метки (Все метки)

Всем привет. Ситуация следующая. Написал тестовое приложение, которое соединяется c блутус модулем (с таким, если это важно) и отсылает на него сообщения по нажатию кнопки.
Всё нормально коннектится и сигнал тоже нормально отправляется, но до тех пор, пока не погаснет экран смартфона (или если вручную его заблокировать).
Когда я снова включаю экран, то все органы управления, не задействующие блутус, работают. А при попытке снова отправить сообщение, приложение падает с NullPointerException и нулём оказывается объект BluetoothAdapter, который я получаю ещё при первом соединении с блутус модулем. (В коде я отметил это место, класс DeviceInterface метод setLedBrightness())

Когда экран выключается, то в лог выводятся следующие строки:
Кликните здесь для просмотра всего текста

09-26 00:09:24.526: I/PersonaManager(17056): getPersonaService() name persona_policy
09-26 00:09:24.596: D/ProgressBar(17056): setProgressDrawable drawableHeight = 18
09-26 00:09:24.596: D/AbsSeekBar(17056): AbsSeekBar Constructor: misSeebarAnimationAvailable = false
09-26 00:09:24.596: D/ProgressBar(17056): setProgressDrawable drawableHeight = 18
09-26 00:09:24.596: D/AbsSeekBar(17056): AbsSeekBar Constructor: misSeebarAnimationAvailable = false
09-26 00:09:24.616: W/IInputConnectionWrapper(17056): showStatusIcon on inactive InputConnection
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: left = 0
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: top = 0
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: right = 476
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: bottom = 48
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: mProgressDrawable.setBounds()
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: left = 0
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: top = 0
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: right = 476
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: bottom = 48
09-26 00:09:24.656: D/ProgressBar(17056): updateDrawableBounds: mProgressDrawable.setBounds()
09-26 00:09:24.986: E/ViewRootImpl(17056): sendUserActionEvent() mView == null

И в итоге заметил также, что если в манифесте убрать горизонтальную ориентацию приложения android:screenOrientation="landscape", то ничего не слетает, и всё нормально работает.

Подскажите, пожалуйста, где копать.

DeviceInterface
Кликните здесь для просмотра всего текста

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
public class DeviceInterface implements Observer {
    private Controller controller;
    private BluetoothSocket clientSocket;
    private BluetoothAdapter bluetoothAdapter;
    
    public DeviceInterface(Controller controller) {
        this.controller = controller;
    }   
    
    @Override
    public void update(Observable observable, Object data) {
        
        State obj = null;
        if(observable instanceof State) {
            obj = (State) observable;
            
            switch(obj.getField()) {
            case "connectionRequest" :  connectToDevice();
            break;
            case "turn" :           controller.infoReceived.setText(Integer.toString(obj.getTurn()-20));
            break;
            case "acceleration" :       controller.infoReceived.setText(Integer.toString(obj.getTurn()-10));
            break;
            case "ledBrightness" :      setLedBrightness(obj.getBrightness());
            break;
            }
        }       
    }
    
    private void connectToDevice() {
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        bluetoothAdapter.enable();
        while(!bluetoothAdapter.isEnabled()) {
            try {
                TimeUnit.MILLISECONDS.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        BluetoothDevice device = bluetoothAdapter.getRemoteDevice("10:14:06:27:03:41");
 
        if(device != null) {
            try{
                //Инициируем соединение с устройством
                Method m = device.getClass().getMethod(
                        "createRfcommSocket", new Class[] {int.class});
     
                clientSocket = (BluetoothSocket) m.invoke(device, 1);
                clientSocket.connect();
 
            } catch (IOException e) {
                Log.d("BLUETOOTH", e.getMessage());
            } catch (SecurityException e) {
                Log.d("BLUETOOTH", e.getMessage());
            } catch (NoSuchMethodException e) {
                Log.d("BLUETOOTH", e.getMessage());
            } catch (IllegalArgumentException e) {
                Log.d("BLUETOOTH", e.getMessage());
            } catch (IllegalAccessException e) {
                Log.d("BLUETOOTH", e.getMessage());
            } catch (InvocationTargetException e) {
                Log.d("BLUETOOTH", e.getMessage());
            }
     
            //Выводим сообщение об успешном подключении
            controller.infoState.setText("CONNECTED to" + device.getName() + " " + device.getAddress());
            Log.d("CONNECTED to", device.getName() + " " + device.getAddress());
        } else {
            controller.infoState.setText("Device not found");
            Log.d("Device not found", "Device not found");          
        }
    }
    
    private void setLedBrightness(int ledBrightness) {
 
           if(bluetoothAdapter.isDiscovering()) bluetoothAdapter.cancelDiscovery(); // ТУТ ПАДАЕТ С NullPointerException 
           try {
               //Получаем выходной поток для передачи данных
 
               OutputStream outStream = clientSocket.getOutputStream();
 
               int value = ledBrightness;
 
               //Пишем данные в выходной поток
 
              outStream.write(value);
 
           } 
           catch (IOException e) { 
              Log.d("BLUETOOTH", e.getMessage());
        }
    
    }
}


State
Кликните здесь для просмотра всего текста

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
public class State extends Observable {
    private HashMap<String, String> changed;
    private boolean connectionRequest = false;
    private int turn = 0;
    private int acceleration = 0;
    private int ledBrightness = 0;
    
    public State() {
        changed = new HashMap<String, String>();
        changed.put("name", "bluetoothServer");
    }
    
    public void notifyObservers() {
        setChanged();
        super.notifyObservers(changed);
    }
    
    public String getName() {
        return changed.get("name");
    }
    
    public String getField() {
        return changed.get("field");
    }
    
    public void connectToDevice() {
        connectionRequest = true;
        changed.put("field", "connectionRequest");
        notifyObservers();
    }
    
    public boolean getConnectDevice() {
        return connectionRequest;
    }
 
    public void setTurn(int arg) {
        turn = arg;
        changed.put("field", "turn");
        notifyObservers();
    }
    
    public int getTurn() {
        return turn;
    }
    
    public void setAcceleration(int arg) {
        acceleration = arg;
        changed.put("field", "acceleration");
        notifyObservers();
    }
    
    public int getAcceleration() {
        return acceleration;
    }   
 
    public void setBrightness(int arg) {
        ledBrightness = arg;
        changed.put("field", "ledBrightness");
        notifyObservers();
    }
    
    public int getBrightness() {
        return ledBrightness;
    }
}


Controller
Кликните здесь для просмотра всего текста

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
public class Controller extends Activity implements OnClickListener {
 
    TextView infoState;
    TextView infoSent;
    TextView infoReceived;
    
    private SeekBar seekBarTurn, seekBarAccel;
    private int ledBrightness = 0; //HIGH == 1; LOW == 0;
 
    private State state;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_controller);
        
        infoState = (TextView) findViewById(R.id.ctrlInfoState);
        infoSent = (TextView) findViewById(R.id.ctrlInfoSent);
        infoReceived = (TextView) findViewById(R.id.ctrlInfoReceived);
 
        findViewById(R.id.btnConnectDevice).setOnClickListener(this);
        findViewById(R.id.btnLedBrightness).setOnClickListener(this);
        
        seekBarTurn = (SeekBar) findViewById(R.id.seekBarTurn);
        seekBarTurn.setOnSeekBarChangeListener(new SeekBarTurn());
 
        state = new State();
        state.addObserver(new DeviceInterface(this));
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case (R.id.btnConnectDevice):
            state.connectToDevice();
            break;
        case (R.id.btnLedBrightness):
            ledBrightness = ledBrightness == 0 ? 1 : 0;
            state.setBrightness(ledBrightness);
            break;
        }
    }
 
    private class SeekBarTurn implements OnSeekBarChangeListener {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
            infoSent.setText(""+progresValue);
            state.setTurn(progresValue);
          }
 
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            infoState.setText(""+seekBar.getProgress());
        }
 
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            infoReceived.setText("Covered: " + seekBar.getProgress() + "/" + seekBar.getMax());
        }           
    }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru