做ios开发的人,看到这个标题就知道肯定要用到private API了。
AVSystemController *av = [AVSystemController sharedAVSystemController];
[av setVolumeTo:0.0 forCategory:@"Ringtone"];
很简单,就两句话,我试了一下虽然setVolumeTo到0了,但是声音却是只小到了一格,还是有很小很小的声音,不过起码也算静音啦。
要用的framework是:Celestial.framework
header如果不是ios6的请自己class-dump一下。
我贴一下ios6下的header:
@interface AVSystemController : NSObject
{
struct AVSystemControllerPrivate *_priv;
}
+ (id)sharedAVSystemController;
+ (void)initialize;
- (void)postEffectiveVolumeNotification:(void *)arg1;
- (void)postFullMuteDidChangeNotification:(void *)arg1;
- (void)handleServerDied;
- (BOOL)okToNotifyFromThisThread;
- (void)makeError:(id *)arg1 withDescription:(id)arg2 code:(long)arg3;
- (BOOL)setAttribute:(id)arg1 forKey:(id)arg2 error:(id *)arg3;
- (id)attributeForKey:(id)arg1;
- (BOOL)allowUserToExceedEUVolumeLimit;
- (BOOL)currentRouteHasVolumeControl;
- (id)pickableRoutesForCategory:(id)arg1;
- (id)volumeCategoryForAudioCategory:(id)arg1;
- (id)routeForCategory:(id)arg1;
- (BOOL)getVolume:(float *)arg1 forCategory:(id)arg2;
- (BOOL)enablePortDiscovery:(BOOL)arg1;
- (BOOL)getPortDiscoveryEnabled;
- (BOOL)setPickedRouteWithPassword:(id)arg1 withPassword:(id)arg2;
- (BOOL)setVolumeTo:(float)arg1 forCategory:(id)arg2;
- (BOOL)changeVolumeBy:(float)arg1 forCategory:(id)arg2;
- (BOOL)getActiveCategoryMuted:(char *)arg1 forRoute:(id)arg2 andDeviceIdentifier:(id)arg3;
- (BOOL)getActiveCategoryMuted:(char *)arg1;
- (BOOL)toggleActiveCategoryMutedForRoute:(id)arg1 andDeviceIdentifier:(id)arg2;
- (BOOL)toggleActiveCategoryMuted;
- (BOOL)getActiveCategoryVolume:(float *)arg1 andName:(id *)arg2 forRoute:(id)arg3 andDeviceIdentifier:(id)arg4;
- (BOOL)setActiveCategoryVolumeTo:(float)arg1 forRoute:(id)arg2 andDeviceIdentifier:(id)arg3;
- (BOOL)changeActiveCategoryVolumeBy:(float)arg1 forRoute:(id)arg2 andDeviceIdentifier:(id)arg3;
- (BOOL)getActiveCategoryVolume:(float *)arg1 andName:(id *)arg2;
- (BOOL)getActiveCategoryVolume:(float *)arg1 andName:(id *)arg2 fallbackCategory:(id)arg3;
- (BOOL)setActiveCategoryVolumeTo:(float)arg1;
- (BOOL)setActiveCategoryVolumeTo:(float)arg1 fallbackCategory:(id)arg2 resultVolume:(float *)arg3 affectedCategory:(id *)arg4;
- (BOOL)changeActiveCategoryVolumeBy:(float)arg1;
- (BOOL)changeActiveCategoryVolumeBy:(float)arg1 fallbackCategory:(id)arg2 resultVolume:(float *)arg3 affectedCategory:(id *)arg4;
- (void)dealloc;
- (id)init;
@end