예제 #1
0
 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);
 }
예제 #2
0
            /// <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);
            }
예제 #3
0
        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());
        }
예제 #4
0
            /// <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);
            }