2017-10-23 6 views
0

내 Raspberry Pi에 Android Things Developer Preview 5.1 (OIR1.170720.017)을 설치했습니다.첨부 된 USB 장치의/dev 장치 경로 가져 오기

앱은 Android 8 Platform API 레벨 26에 대해 Xamarin을 사용하여 만들어졌습니다. USB 엄지 드라이브가 연결될 때 hotplug 이벤트를 감지하고 싶습니다.

[BroadcastReceiver(Enabled = true)] 
[IntentFilter(new[] { UsbManager.ActionUsbDeviceAttached, UsbManager.ActionUsbDeviceDetached })] 
public class MyBroadCastReceiver : BroadcastReceiver 
{ 
    public event EventHandler UsbDeviceAttached; 
    public event EventHandler UsbDeviceDetached; 

    public override void OnReceive(Context context, Intent intent) 
    { 
     if (intent.Action.Equals(UsbManager.ActionUsbDeviceDetached)) UsbDeviceDetached?.Invoke(this, new EventArgs()); 
     if (intent.Action.Equals(UsbManager.ActionUsbDeviceAttached)) UsbDeviceAttached?.Invoke(this, new EventArgs()); 
    } 
} 

주요 활동 : 내 코드에서 방송 수신기를 사용하여이 작업을 archieved 이제

private MyBroadCastReceiver receiver; 
    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
     SetContentView(Resource.Layout.Main); 

     this.receiver = new MyBroadCastReceiver(); 
    } 

    protected override void OnResume() 
    { 
     base.OnResume(); 
     RegisterReceiver(this.receiver, new IntentFilter(UsbManager.ActionUsbDeviceAttached)); 
    } 

    protected override void OnPause() 
    { 
     UnregisterReceiver(this.receiver); 
     base.OnPause(); 
    } 

, 나는 그것에 어떤 파티션 또는 파일 시스템에 빈 USB 썸 드라이브, 그냥 일반 블록 스토리지를 . 드라이브를 연결하거나 분리 할 때 OnReceive(Context, Intent) 메서드가 호출됩니다. contextintent 인수를 살펴 보았지만 연결된 장치에 대한 자세한 정보를 확인할 수 없었습니다. 많은 프로퍼티가 null 인 것으로 보입니다 : Content of intent argument 디바이스의/dev 노드를 얻고 싶습니다 (/ mnt가 아니거나 드라이브에 파일 시스템이있을 때 사용할 수있는 마운트 포인트가 아닙니다). dmesg을 보면 블록 장치가 노드 /dev/sda에 할당 된 것을 볼 수 있습니다. 코드에서 노드 이름/경로를 가져 오는 방법이 있습니까? 이를위한 추가 권한이 필요합니까? 고맙습니다.

+1

https://stackoverflow.com/a/42474815/3290339 – Onik

+0

감사합니다. 그러나 이것은 내 질문에 대한 대답이 아닙니다. 연결되는 장치의/dev/노드를 어떻게 찾습니까? – Simon

+0

[this] (https://stackoverflow.com/q/41890251/6950238) 질문 및 답변을보십시오. –

답변

0

Android 보안 모델은 앱이 연결된 USB 장치의 /dev 노드와 같은 원시 장치 리소스에 액세스하는 것을 차단합니다. 장치와 통신하려면 USB API를 사용해야합니다.

안드로이드에 대한 USB Enumerator sample을 검토하여 Android USB API를 사용하여 장치 삽입을 감지하고 장치에 대한 통신 채널을 여는 방법을 더 잘 이해할 수 있습니다.

특히 USB 장치 첨부는 앱에서 브로드 캐스트로 처리하지 않습니다. 지정된 기기 유형을 필터링하는 앱의 활동 의도로 실행됩니다. USB Host API Guide은이 모든 작동 방식에 대한 세부 정보를 제공 할 수도 있습니다.

+0

메모 주셔서 감사합니다. – Simon