Xamarin Android - 调用Environment.GetExternalStorageState(文件路径)时出现异常

时间:2017-10-31 18:43:19

标签: c# android xamarin xamarin.android

我无法将Android.OS.Environment.GetExternalStorageState 方法用作outlined here

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

  

没有name ='getExternalStorageState'的静态方法   signature ='(Ljava / io / File;)Ljava / lang / String;'在类中   Landroid / OS /环境;

可靠地再现问题的示例应用can be found here

请注意,这是在具有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变量的下一行执行异常时会抛出异常。

此外,作为一个FYI - 抛出的是.Net System.Exception,而不是Java.Lang.Exception

如果这段代码是正确的,并且实际上框架代码中存在一个错误(Xamarin和/或Android),那么是否有建议的工作来确定SD卡是否可用于阅读&写作?

1 个答案:

答案 0 :(得分:2)

  

没有静态方法,名称='getExternalStorageState'tignra ='(Ljava / io / File;)Ljava / lang / String;'类Landroid / os / Environment;

API 21 中添加了

String getExternalStorageState (File path)

re:https://developer.android.com/reference/android/os/Environment.html#getExternalStorageState(java.io.File)