2016-12-04 69 views
0

我使用Visual Studio 2015和Xamarin和我想要當用戶將在Android應用程序的USB驅動器來檢測。Xamarin的Android,檢測USB驅動器連接

這是我的廣播接收器實現。

[BroadcastReceiver(Enabled =true)] 
[IntentFilter(new[] { Intent.ActionMediaMounted })] 
class DeviceMonitor : BroadcastReceiver, IDeviceMonitor 
{ 
    public override void OnReceive(Context context, Intent intent) 
    { 
     if (DeviceAdded != null) 
      DeviceAdded(this, new EventArgs()); 

     if (intent.Action.ToLower() == "android.intent.action.ums_connected") 
     { 
      Java.IO.File[] files = context.GetExternalMediaDirs(); 
     } 
    } 
} 

接收機處登記在MainActivity的onCreate方法

DeviceMonitor monitor = new Classes.DeviceMonitor(); 
     RegisterReceiver(monitor, new Android.Content.IntentFilter(Intent.ActionMediaMounted)); 

這是我AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="WebView.CrossPlatform.Server.Droid" android:versionCode="1"> 
<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<uses-feature android:name="android.hardware.usb.host" android:required="false" /> 
<application android:label="WebView.CrossPlatform.Server.Droid"> 
    <receiver android:name=".Classes.DeviceMonitor" android:enabled="true" android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
      <data android:scheme="file" /> 
     </intent-filter> 
    </receiver> 
</application> 

但這似乎並沒有工作。我一直在尋找解決方案並嘗試瞭解我能找到的所有東西,但沒有任何工作。

任何人都可以看到我在做什麼錯?

感謝,

回答

0

我發現這個問題。事實證明,我不需要手動更改清單。通過給我的類添加屬性,清單是自動生成的。 它通過使用「android.intent.action.MEDIA_MOUNTED」現在就行動起來工作。

0

看來你只定義在您的清單中的行動「android.intent.action.MEDIA_MOUNTED」,但在你的DeviceMonitor,你檢測「android.intent.action.ums_connected」行動。

例如,你可以改變你的表現是這樣的:

<receiver android:name=".Classes.DeviceMonitor"> 
    <intent-filter> 
     <action android:name="android.intent.action.UMS_CONNECTED" /> 
     <action android:name="android.intent.action.UMS_DISCONNECTED" /> 
    </intent-filter> 
</receiver> 

而在你DeviceMonitor

public override void OnReceive(Context context, Intent intent) 
{ 
    if (intent.Action == "android.intent.action.UMS_CONNECTED") 
    { 
     //TODO: 
    } 

    if (intent.Action == "android.intent.action.UMS_DISCONNECTED") 
    { 
     //TODO: 
    } 
} 
+0

接受方法從來沒有被調用,所以我沒有關係,我放在那裏。該文檔還指出,「UMS_CONNECTED」操作已棄用。 – Benjamien

+0

@Benjamien,你有沒有讀過這個建議使用'BatteryManager'的[回覆](http://stackoverflow.com/questions/4600896/android-detecting-usb)?無論如何,我們需要聲明清單中的行爲。 –