C# Xamarin Android-调用Environment.GetExternalStorageState(文件路径)时发生异常

C# Xamarin Android-调用Environment.GetExternalStorageState(文件路径)时发生异常,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,我无法使用Android.OS.Environment.GetExternalStorageState方法 Android.OS.Environment.GetExternalStorageState属性运行正常。但是,为了查询辅助外部SD卡的状态,我需要使用方法(而不是属性)并将路径传递到辅助外部SD卡。调用此方法时,我收到一个.NET异常,如下所示: 没有名为='getExternalStorageState'的静态方法 签名='(Ljava/io/File;)Ljava/lang/Stri

我无法使用Android.OS.Environment.GetExternalStorageState方法

Android.OS.Environment.GetExternalStorageState
属性运行正常。但是,为了查询辅助外部SD卡的状态,我需要使用方法(而不是属性)并将路径传递到辅助外部SD卡。调用此方法时,我收到一个.NET异常,如下所示:

没有名为='getExternalStorageState'的静态方法 签名='(Ljava/io/File;)Ljava/lang/String;'课堂上 Landroid/os/Environment

可靠地再现问题的示例应用程序

请注意,这是在具有2个SD卡的设备上。一个是内部的(不可移动),是默认的SD卡路径。另一个SD卡是可拆卸的外部SD卡。此测试应用程序假定外部辅助可移动SD卡位于根路径“sdcard1”处,默认内部路径为“sdcard0”。如果您的设备不同,您可能需要更改此设置

下面是示例应用程序中CheckState的精简版本

private bool CheckState(string pathStr) 
{
   try
     {
        var path = new File(pathStr);

        var otherState = Environment.ExternalStorageState;

        var state = Environment.GetExternalStorageState(path);

        // Good state - set values and be done
        return state.Equals(Environment.MediaMounted);

      }
    catch (Java.Lang.Exception ex)
      {
          Debug(Tag, $"Java Ex: {ex.Message}");
      }
    catch (Exception ex)
      {
          Debug(Tag, $".Net Ex: {ex.Message}");
      }
    return false;
}
在上面的示例代码中,
otherState
变量设置为内部SD卡的状态。但是,当带有
state
变量的下一行执行时,将引发异常

另外,仅供参考-抛出的是.Net
System.Exception
,而不是
Java.Lang.Exception

如果这段代码是正确的,并且在某个地方(Xamarin和/或Android)的框架代码中实际上存在一个bug,那么是否有推荐的解决方法来确定SD卡是否可用于读写

没有名为='getExternalStorageState'签名='(Ljava/io/File;)Ljava/lang/String;'的静态方法类内Landroid/os/Environment

字符串getExternalStorageState(文件路径)
已添加到API 21


回复:

这就解释了-我们正在运行KitKat@SteveXamarin的文档在本例中列出了错误的API级别,我倾向于使用Google的文档,因为我知道它们是正确的;-)进行API级别检查,如果