Xamarin Android,检测USB驱动器连接

时间:2016-12-04 12:12:51

标签: android xamarin broadcastreceiver

我正在使用Visual Studio 2015和Xamarin,我正在尝试检测用户何时在Android应用中插入USB驱动器。

这是我的BroadcastReceiver实现。

 [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();
        }
    }
}

接收器在OnCreate方法的MainActivity中注册

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>

但这似乎不起作用。我寻找解决方案并尝试了我能找到的所有东西,但没有任何工作。

谁能看到我做错了什么?

谢谢,

2 个答案:

答案 0 :(得分:0)

似乎你只定义了一个动作&#34; android.intent.action.MEDIA_MOUNTED&#34;在你的清单中,但是在你的DeviceMonitor中,你检测到&#34; android.intent.action.ums_connected&#34;行动。

您可以更改清单,如下所示:

<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:
    }
}

答案 1 :(得分:0)

我发现了问题。 事实证明,我不需要手动更改清单。通过向我的类添加属性,可以自动生成清单。 它现在使用“android.intent.action.MEDIA_MOUNTED”动作。