Из platform_frameworks_base / core / java / android / hardware / usb / UsbManager.java :
Константа помечена как @UnsupportedAppUsage
, указывая, что она не предназначена для воздействия / используется приложениями. Это, вероятно, означает, что она не гарантируется стабильной во всех версиях.
Кроме того, намерение указывает состояние соединения USB с хостом, а не состояние OTG USB.
Javadoc для UsbManager
говорит:
Этот класс позволяет вам получить доступ к состоянию USB и обмениваться данными с USB-устройствами. В настоящее время в общедоступном API поддерживается только режим хоста.
blockquote>И для
ACTION_USB_STATE
:Broadcast Action: Липкая передача для событий изменения состояния USB в режиме устройства.
Это липкая широковещательная рассылка для клиентов, которая включает в себя состояние подключения / отключения USB,
"connected"
логическое значение, указывающее, подключен или отключен USB."host_connected"
логическое значение, указывающее, подключен или отключен USB как хост."configured"
логическое значение, указывающее, настроен ли USB. в настоящее время ноль, если не настроен, один для настроенного."adb"
логическое значение, указывающее, включена ли функция adb."rndis"
логическое значение, указывающее, включена ли функция RNDIS ethernet."mtp"
логическое значение, указывающее, включена ли функция MTP. активированUSB_FUNCTION_PTP
логическое значение, указывающее, включена ли функция PTP"ptp"
логическое значение, указывающее, включена ли дополнительная функция"audio_source"
логическое значение, указывающее включена ли функция аудиоисточника"midi"
boolean extra, указывающая, включена ли функция MIDIЕсли липкое намерение не найдено, это означает, что USB отключен, USB не настроен, функция MTP включена, а все остальные функции отключены.
BLOCKQUOTE>
Используйте это:
PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
РЕДАКТИРОВАНИЕ: Конечно, корректный ответ имеет что Jay. GetProperties()
без параметров эквивалентно GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static )
. Эти BindingFlags.FlattenHierarchy
не играет роли здесь.
Я не думаю, что это, это усложнило.
, Если Вы удаляете BindingFlags
параметр в GetProperties, я думаю, что Вы получаете результаты, которые Вы ищете:
class B
{
public int MyProperty { get; set; }
}
class C : B
{
public string MyProperty2 { get; set; }
}
static void Main(string[] args)
{
PropertyInfo[] info = new C().GetType().GetProperties();
foreach (var pi in info)
{
Console.WriteLine(pi.Name);
}
}
производит
MyProperty2 MyProperty
Если вы получите доступ к Type.BaseType
, вы можете получить базовый тип. Вы можете получить рекурсивный доступ к каждому базовому типу, и вы узнаете, когда достигли дна, когда ваш тип System.Object
.
Type type = obj.GetType();
PropertyInfo[] info = type.GetProperties(BindingFlags.Public);
PropertyInfo[] baseProps = type.BaseType.GetProperties(BindingFlags.Public);
Я был бы склонен соглашаться с Nicolas; если Вы не знаете о необходимости в отражении тогда ComponentModel
жизнеспособная альтернатива, с преимуществом, что Вы получите корректные метаданные даже для моделей во время выполнения (такой как DataView
/ DataRowView
).
, Например:
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(obj))
{
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(obj));
}
Как в стороне, можно также сделать немного простые приемы производительности с этим; можно сделать то же с отражением и Delegate.CreateDelegate
, но нет никакого централизованного места для скрытия логики, в отличие от этого TypeDescriptor
с TypeDescriptionProvider
(не волнуйтесь, незнакомы ли они; можно просто использовать код как есть "";-p).