static void AssertStorageVolume(StorageVolume storageVolume, StorageVolumeOptions options) { AssertContainer(storageVolume, options); Assert.AreEqual(storageVolume.StorageUsed, options.StorageUsed); Assert.AreEqual(storageVolume.StorageTotal, options.StorageTotal); Assert.AreEqual(storageVolume.StorageFree, options.StorageFree); Assert.AreEqual(storageVolume.StorageMedium, options.StorageMedium); }
/// <summary> /// liefert die akt. Daten des Volumes (API level 24 / Nougat / 7.0) /// </summary> /// <param name="volumeno">Nummer des gewünschten Volumes (wenn nicht vorhanden, wird nur die Volumeanzahl geliefert)</param> /// <returns></returns> public VolumeData GetVolumeData(int volumeno) { VolumeData data = new VolumeData { VolumeNo = volumeno }; if (volumeno >= 0) { StorageManager sm = GetStorageManager(); if (sm != null) { if (global::Android.OS.Build.VERSION.SdkInt >= global::Android.OS.BuildVersionCodes.N) // "Nougat", 7.0 { data.Volumes = sm.StorageVolumes.Count; if (0 <= volumeno && volumeno < data.Volumes) { StorageVolume sv = sm.StorageVolumes[volumeno]; data.IsPrimary = sv.IsPrimary; data.IsRemovable = sv.IsRemovable; data.IsEmulated = sv.IsEmulated; data.Path = Path4StorageVolume(sv); data.State = GetVolumeState(sv.State); data.Description = sv.GetDescription(global::Android.App.Application.Context); data.Name = data.IsPrimary ? ROOT_ID_PRIMARY_EMULATED : sv.Uuid; try { StatFs statfs = new StatFs(data.Path); data.AvailableBytes = statfs.AvailableBytes; data.TotalBytes = statfs.TotalBytes; } catch { data.TotalBytes = data.AvailableBytes = 0; } } } } } else // Daten des internal Storage holen { data.IsPrimary = false; data.IsRemovable = false; data.IsEmulated = false; data.Path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.UserProfile); // == Xamarin.Essentials.FileSystem.AppDataDirectory; data.Path = data.Path.Substring(0, data.Path.LastIndexOf(Path.DirectorySeparatorChar)); data.State = VolumeState.MEDIA_MOUNTED; data.Description = "intern"; data.Name = "intern"; try { StatFs statfs = new StatFs(global::Android.OS.Environment.RootDirectory.CanonicalPath); data.AvailableBytes = statfs.AvailableBytes; data.TotalBytes = statfs.TotalBytes; } catch { data.TotalBytes = data.AvailableBytes = 0; } } return(data); }
public void StorageVolumeInstantiation() { var options = new StorageVolumeOptions(); SetStorageVolumeOptions(options); var storage_volume = new StorageVolume("-1", "-1", options); AssertStorageVolume(storage_volume, options); AssertStorageVolume(storage_volume, storage_volume.GetOptions()); }
/// <summary> /// Hilfsfunktion für <see cref="global::Android.OS.Storage.StorageVolume"/>: die Methode getPath() ist z.Z. noch nicht umgesetzt und wird per JNI realisiert (API level 24 / Nougat / 7.0) /// </summary> /// <param name="sv"></param> /// <returns></returns> string Path4StorageVolume(StorageVolume sv) { string path = ""; try { // http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html IntPtr methodID = JNIEnv.GetMethodID(sv.Class.Handle, "getPath", "()Ljava/lang/String;"); IntPtr lref = JNIEnv.CallObjectMethod(sv.Handle, methodID); using (var value = new Java.Lang.Object(lref, JniHandleOwnership.TransferLocalRef)) { path = value.ToString(); } } catch { path = ""; } return(path); }