2016-12-04 5 views
0

を検出します。Xamarinアンドロイド、私は、Visual Studio 2015を使用していますし、Xamarinと私は、ユーザーがAndroidアプリでUSBドライブを挿入したときに検出しようとしているUSBドライブ接続

これは私BroadcastReceiverの実装です。受信機は、OnCreateの方法

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

にMainActivityで登録されている

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

これは私の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

<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中:あなたは、たとえば、このようなあなたのマニフェストを変更することができます

。 判明したように、マニフェストを手作業で変更する必要はありません。クラスに属性を追加することで、マニフェストが自動的に生成されます。 "android.intent.action.MEDIA_MOUNTED"アクションを使用して動作します。

0

あなただけのマニフェストにアクション「android.intent.action.MEDIA_MOUNTED」を定義したが、あなたのDeviceMonitorに、あなたは「android.intent.action.ums_connected」アクションを検出しているようです。私は問題を発見

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)を読んでいますか?とにかく、マニフェストでアクションを宣言する必要があります。 –

関連する問題