2015-12-17 5 views
1

Понимая, почему не рекомендуется определять тип устройства для выполнения функциональных возможностей во время выполнения, лучшие практики диктуют обнаружение того, какие API-интерфейсы присутствуют. Таким образом, пользователи, запускающие свой планшет в настольном режиме, например, не будут испытывать нежелательное поведение. Кроме того, поскольку аппаратное обеспечение настолько динамично, проверка на взаимодействие с пользователем, как сенсорная способность, также не является хорошим подходом.Определить, какие API-интерфейсы присутствуют в приложении UWP

В нашем проекте мы решили идентифицировать API, которые нам понадобятся для трех разных ширины экрана - малых, средних и больших. Microsoft перечислила эти API here. Но этот список довольно длинный, и проверка наличия каждого из них была бы громоздкой.

Любые предложения по выполнению этих проверок без повторения таких звонков, как этот ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons") для каждого контракта в списке API, предоставленном Microsoft, будут очень признательны.

Заранее спасибо.

+3

Вам нужно только проверить, что вам действительно нужно в вашем приложении. Меня это удивило бы, если бы они вам нужны. – Bart

+0

Это имеет смысл, и вы правы, нам, конечно, они не понадобятся. Я думаю, что это мой разрыв ... не полностью зная, какая функциональность наш клиент понадобится для каждого вкуса (ширина экрана) приложения. Спасибо, Барт. – killQuotes

ответ

1

Что вы обычно делаете, это просто добавить проверку вокруг кода, который нуждается конкретный API:

if(ApiInformation.IsEventPresent("Windows.Phone.UI.Input.HardwareButtons", "BackPressed")) 
{ 
    HardwareButtons.BackPressed += OnHardwareButtonsBackPressed; 
} 

Если вы знаете, что вы получили несколько блоков кода, требующие же API, можно кэшировать значение.

Альтернативой является проверка полного договора сразу. Если вы знаете, что вам нужно иметь возможность делать телефонные звонки, вместо проверки каждого вызова или вызова метода просто проверьте контракт.

ApiInformation.IsApiContractPresent("Windows.ApplicationModel.Calls.CallsPhoneContract"); 

«Не зная», что ваш клиент может понадобиться это «не вопрос». Ответ на эту проблему - YAGNI. Не проверяйте контракт, если вы не достигнете того момента, когда собираетесь его реализовать.

 Смежные вопросы

  • Нет связанных вопросов^_^