Я не могу узнать температуру окружающей среды на своем телефоне ⇐ Android
Я не могу узнать температуру окружающей среды на своем телефоне
Я создаю приложение, которое должно отображать все значения всех датчиков, включая датчик TYPE_AMBIENT_TEMPERATURE. Я использую класс SensorManager.
Я написал код и протестировал его на эмуляторе, и он сработал. Но если я запустил приложение на своем телефоне (Galaxy A20e), оно не сработало. Кажется, он не входит в метод onSensorChanged. Я поместил журналы в код и знаю, что датчик инициализирован и активирован. Я также установил приложение Термометр, и оно работает нормально. Значит, физический Датчик работает. Кто-нибудь знает, что не так с кодом? Мой код следующий:
Основная активность
пакет com.blueapps.sensorstation; импортировать android.content.Context; импортировать android.hardware.SensorManager; импортировать android.os.Bundle; импортировать android.view.View; импортировать androidx.appcompat.app.AppCompatActivity; импортировать com.blueapps.sensorstation.databinding.ActivityMainBinding; публичный класс MainActivity расширяет AppCompatActivity { частная привязка ActivityMainBinding; частный прослушиватель setOnClickListener; частные StartSensors startSensors; частный SensorManager SensorManager; @Override protected void onCreate (Bundle saveInstanceState) { // инициализация представления super.onCreate(saveInstanceState); привязка = ActivityMainBinding.inflate(getLayoutInflater()); Просмотр представления =binding.getRoot(); setContentView (просмотр); // адаптируем макет к экрану AdaptLayout LayoutAdapter = новый AdaptLayout(this.getWindowManager(), getResources(), привязка); LayoutAdapter.adaptView(); // устанавливаем OnCLickListener для компонентов Прослушиватель = новый setOnClickListener (getApplicationContext (), просмотр, привязка); Слушатель.setListener(); // Получаем диспетчер датчиков SensorManager = ( SensorManager) getSystemService(Context.SENSOR_SERVICE); // инициализируем стартовый класс датчиков startSensors = новые StartSensors (getResources (), SensorManager, привязка); } @Override защищенный недействительный onPause() { супер.онПауза(); // Деактивировать датчики startSensors.deactivate(); // Передаем прослушивателю On Click информацию о вызове onPause Слушатель.Пауза(); } @Override защищенный недействительный onResume() { супер.онрезюме(); // Активируем датчики startSensors.activate(); // Передаем прослушивателю On Click информацию о вызове onResume Слушатель.Резюме(); } @Override защищенная пустота onStop() { супер.онСтоп(); // Передаем прослушивателю On Click информацию о вызове onPause Слушатель.Пауза(); } @Override защищенный недействительный onRestart() { супер.onRestart(); // Передаем прослушивателю On Click информацию о вызове onResume Слушатель.Резюме(); } } Стартовые датчики пакет com.blueapps.sensorstation; импортировать android.content.res.Resources; импортировать android.hardware.SensorManager; импортировать android.widget.TextView; импортировать com.blueapps.sensorstation.databinding.ActivityMainBinding; импортировать com.blueapps.sensorstation.sensors.Temperature; общественный класс StartSensors { частный SensorManager SensorManager; частные ресурсы; // Классы датчиков Температура температура; // Текстовые представления частный TextView textTemp; public StartSensors (ресурсы ресурсов, SensorManager SensorManager, привязка ActivityMainBinding) { this.sensorManager = SensorManager; this.resources = ресурсы; // Привязываем TextViews textTemp =binding.temperatureText; // Экземплярные классы датчиков температура = новая температура (ресурсы, SensorManager, textTemp); } общественная недействительная активация () { // Температура температура.активировать(); } общественная недействительность деактивировать () { // Температура температура.деактивировать(); } } Температура пакет com.blueapps.sensorstation.sensors; импортировать android.annotation.SuppressLint; импортировать android.content.res.Resources; импортировать android.hardware.Sensor; импортировать android.hardware.SensorEvent; импортировать android.hardware.SensorEventListener; импортировать android.hardware.SensorManager; импортировать android.util.Log; импортировать android.widget.TextView; импортировать com.blueapps.sensorstation.R; общедоступный класс Температура реализует SensorEventListener { частный SensorManager SensorManager; личный текст TextView; частные ресурсы; частный датчик температуры; общедоступная температура (ресурсы ресурсов, SensorManager SensorManager, текст TextView) { this.sensorManager = SensorManager; этот.текст = текст; this.resources = ресурсы; } общественная недействительная активация () { температура = SensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE); SensorManager.registerListener(это, температура, SensorManager.SENSOR_DELAY_UI); Log.d("startSensors", "Датчик температуры активирован"); } общественная недействительность деактивировать () { SensorManager.unregisterListener(это, температура); Log.d("startSensors", "Датчик температуры деактивирован"); } @SuppressLint("SetTextI18n") @Override public void onSensorChanged (SensorEvent SensorEvent) { двойная степень = SensorEvent.values[0]; text.setText(String.format("%.1f", степень) + resources.getString(R.string.unit_temp)); Log.d("startSensors", "Температура: " + String.format("%.1f", степень) + "°C"); } @Override public void onAccuracyChanged(Датчик датчика, int i) {} } Другие упомянутые классы (setOnClickListener, AdaptLayout) не имеют отношения к датчикам.
Я создаю приложение, которое должно отображать все значения всех датчиков, включая датчик TYPE_AMBIENT_TEMPERATURE. Я использую класс SensorManager.
Я написал код и протестировал его на эмуляторе, и он сработал. Но если я запустил приложение на своем телефоне (Galaxy A20e), оно не сработало. Кажется, он не входит в метод onSensorChanged. Я поместил журналы в код и знаю, что датчик инициализирован и активирован. Я также установил приложение Термометр, и оно работает нормально. Значит, физический Датчик работает. Кто-нибудь знает, что не так с кодом? Мой код следующий:
Основная активность
пакет com.blueapps.sensorstation; импортировать android.content.Context; импортировать android.hardware.SensorManager; импортировать android.os.Bundle; импортировать android.view.View; импортировать androidx.appcompat.app.AppCompatActivity; импортировать com.blueapps.sensorstation.databinding.ActivityMainBinding; публичный класс MainActivity расширяет AppCompatActivity { частная привязка ActivityMainBinding; частный прослушиватель setOnClickListener; частные StartSensors startSensors; частный SensorManager SensorManager; @Override protected void onCreate (Bundle saveInstanceState) { // инициализация представления super.onCreate(saveInstanceState); привязка = ActivityMainBinding.inflate(getLayoutInflater()); Просмотр представления =binding.getRoot(); setContentView (просмотр); // адаптируем макет к экрану AdaptLayout LayoutAdapter = новый AdaptLayout(this.getWindowManager(), getResources(), привязка); LayoutAdapter.adaptView(); // устанавливаем OnCLickListener для компонентов Прослушиватель = новый setOnClickListener (getApplicationContext (), просмотр, привязка); Слушатель.setListener(); // Получаем диспетчер датчиков SensorManager = ( SensorManager) getSystemService(Context.SENSOR_SERVICE); // инициализируем стартовый класс датчиков startSensors = новые StartSensors (getResources (), SensorManager, привязка); } @Override защищенный недействительный onPause() { супер.онПауза(); // Деактивировать датчики startSensors.deactivate(); // Передаем прослушивателю On Click информацию о вызове onPause Слушатель.Пауза(); } @Override защищенный недействительный onResume() { супер.онрезюме(); // Активируем датчики startSensors.activate(); // Передаем прослушивателю On Click информацию о вызове onResume Слушатель.Резюме(); } @Override защищенная пустота onStop() { супер.онСтоп(); // Передаем прослушивателю On Click информацию о вызове onPause Слушатель.Пауза(); } @Override защищенный недействительный onRestart() { супер.onRestart(); // Передаем прослушивателю On Click информацию о вызове onResume Слушатель.Резюме(); } } Стартовые датчики пакет com.blueapps.sensorstation; импортировать android.content.res.Resources; импортировать android.hardware.SensorManager; импортировать android.widget.TextView; импортировать com.blueapps.sensorstation.databinding.ActivityMainBinding; импортировать com.blueapps.sensorstation.sensors.Temperature; общественный класс StartSensors { частный SensorManager SensorManager; частные ресурсы; // Классы датчиков Температура температура; // Текстовые представления частный TextView textTemp; public StartSensors (ресурсы ресурсов, SensorManager SensorManager, привязка ActivityMainBinding) { this.sensorManager = SensorManager; this.resources = ресурсы; // Привязываем TextViews textTemp =binding.temperatureText; // Экземплярные классы датчиков температура = новая температура (ресурсы, SensorManager, textTemp); } общественная недействительная активация () { // Температура температура.активировать(); } общественная недействительность деактивировать () { // Температура температура.деактивировать(); } } Температура пакет com.blueapps.sensorstation.sensors; импортировать android.annotation.SuppressLint; импортировать android.content.res.Resources; импортировать android.hardware.Sensor; импортировать android.hardware.SensorEvent; импортировать android.hardware.SensorEventListener; импортировать android.hardware.SensorManager; импортировать android.util.Log; импортировать android.widget.TextView; импортировать com.blueapps.sensorstation.R; общедоступный класс Температура реализует SensorEventListener { частный SensorManager SensorManager; личный текст TextView; частные ресурсы; частный датчик температуры; общедоступная температура (ресурсы ресурсов, SensorManager SensorManager, текст TextView) { this.sensorManager = SensorManager; этот.текст = текст; this.resources = ресурсы; } общественная недействительная активация () { температура = SensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE); SensorManager.registerListener(это, температура, SensorManager.SENSOR_DELAY_UI); Log.d("startSensors", "Датчик температуры активирован"); } общественная недействительность деактивировать () { SensorManager.unregisterListener(это, температура); Log.d("startSensors", "Датчик температуры деактивирован"); } @SuppressLint("SetTextI18n") @Override public void onSensorChanged (SensorEvent SensorEvent) { двойная степень = SensorEvent.values[0]; text.setText(String.format("%.1f", степень) + resources.getString(R.string.unit_temp)); Log.d("startSensors", "Температура: " + String.format("%.1f", степень) + "°C"); } @Override public void onAccuracyChanged(Датчик датчика, int i) {} } Другие упомянутые классы (setOnClickListener, AdaptLayout) не имеют отношения к датчикам.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение