容量、使用可能なストレージ、アプリの総数、ビデオ、写真などのストレージ情報をプログラムで取得したいと思います。よろしくお願いします..
2 に答える
これらを試してみてください。ただし、ジェイルブレイクされていないデバイスでの動作は保証されていません。
- (NSNumber *) totalDiskSpace
{
NSDictionary *fattributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
return [fattributes objectForKey:NSFileSystemSize];
}
- (NSNumber *) freeDiskSpace
{
NSDictionary *fattributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
return [fattributes objectForKey:NSFileSystemFreeSize];
}
ディレクトリ(サブディレクトリを含む)内のファイルの数をカウントするには、これを使用しました(これは最も効率的な方法ではありません):
-(NSString *)numberOfSongs
{
NSString *musicPath = @"/var/mobile/Media/iTunes_Control/Music/";
NSArray *dirs = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:musicPath error:nil];
NSArray *subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:musicPath error:nil];
int totalFiles;
int subT = [subs count];
int dirT = [dirs count];
totalFiles = subT - dirT;
return [NSString stringWithFormat:@"%i", totalFiles];
}
WrightsCSがディスク容量の質問に答えたようです。
ALAssetsLibrary
画像の数が必要な場合は、 (設定AssetsLibrary.framework
の[バイナリとライブラリのリンク]セクションにこのフレームワークを含める必要があります)をチェックアウトしてから、次の手順を実行します。Target
#import <AssetsLibrary/AssetsLibrary.h>
// get the image assets
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSAssert(library, @"Unable to open ALAssetsLibrary");
NSUInteger __block images = 0;
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup *group, BOOL *stop){
NSLog(@"%@", group);
images += group.numberOfAssets;
dispatch_async(dispatch_get_main_queue(), ^{
// update my UI with the number of images
});
}
failureBlock:^(NSError *err){
NSLog(@"err=%@", err);
}];
ジェイルブレイクされていないデバイスでiTunesライブラリにアクセスする場合は、iPod Library Accessプログラミングガイドを確認してください。このガイドには、使用方法が記載されていますMPMediaQuery
(プロジェクトにを含めることを忘れないMediaPlayer.framework
でください)。
#import <MediaPlayer/MediaPlayer.h>
MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSAssert(everything, @"Unable to open MPMediaQuery");
iTunesMediaCount = [[everything items] count];
アプリの数を取得するための公開されたAPIがあるかどうかはわかりません。ジェイルブレイクされたデバイスの解決策はありますが、私たちの残りの部分についてはわかりません。
これについては質問しませんでしたが、使用可能なRAM(フラッシュストレージではなく、アプリで使用可能なメモリ)が必要な場合は、次の方法で入手できます。
#import <mach/mach.h>
#import <mach/mach_host.h>
- (void)determineMemoryUsage
{
mach_port_t host_port;
mach_msg_type_number_t host_size;
vm_size_t pagesize;
host_port = mach_host_self();
host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
host_page_size(host_port, &pagesize);
vm_statistics_data_t vm_stat;
if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS)
NSLog(@"Failed to fetch vm statistics");
/* Stats in bytes */
natural_t mem_used = (vm_stat.active_count +
vm_stat.inactive_count +
vm_stat.wire_count) * pagesize;
natural_t mem_free = vm_stat.free_count * pagesize;
natural_t mem_total = mem_used + mem_free;
// do whatever you want with mem_used, mem_free, and mem_total
}