Андроид. Как определить, является ли устройство планшетным или складным?
Мне нужно определить, является ли устройство планшетом, складным или телефоном. Я использую следующий код для определения планшета:
public boolean isTablet(Context context) {
boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
return (xlarge || large);
}
Я тестировал этот код на нескольких устройствах, он работал корректно. Но я все же не уверен, что это стопроцентно рабочий вариант.
Но у меня другая проблема. Я не нашел способа определить складные устройства.
Помогите пожалуйста, можно ли определить складной аппарат или нет?
Возможно, кто-то уже нашел работающее решение и может подсказать, как его можно реализовать.
PS Мне нужна только информация об устройстве(телефон,планшет,раскладушка),чтобы потом отправить эти данные в метрику
1 ответ
Чтобы ваше приложение знало о сгибах, используйте Jetpack Window Manager — библиотеку, которая предоставляет общую поверхность API для различных функций окна, таких как сгибы или петли. Когда ваше приложение поддерживает сгибы, содержимое окна можно адаптировать, чтобы избежать сгибов и шарниров или использовать их в своих интересах и использовать их в качестве естественных разделителей.
Теперь он поддерживает складные телефоны через WindowInfoTracker и FoldingFeature. WindowMetricsCalculator, чтобы помочь вычислить текущую WindowMetrics.
Добавьте эту зависимость
implementation "androidx.window:window:1.0.0"
class DisplayFeaturesActivity : AppCompatActivity() {
private lateinit var binding: ActivityDisplayFeaturesBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDisplayFeaturesBinding.inflate(layoutInflater)
setContentView(binding.root)
lifecycleScope.launch(Dispatchers.Main) {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
WindowInfoTracker.getOrCreate(this@DisplayFeaturesActivity)
.windowLayoutInfo(this@DisplayFeaturesActivity)
.collect { newLayoutInfo ->
// Use newLayoutInfo to update the layout.
}
}
}
}
}