中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS音頻流播放、后臺播放、遠程控制、鎖屏封面等總結

發布時間:2020-07-16 18:20:12 來源:網絡 閱讀:4231 作者:Im劉亞芳 欄目:移動開發

1. 推薦音頻流播放Framework

知名度比較高的Framework應該是github的 mattgallagher/AudioStreamer ,因為國內有一些論壇和教程網的例子是用這個Framework寫的,而且有國人略微改進了一下這個Framework并加了中文注釋。不過這個Framework的缺點在于不支持ARC,并且狀態的改變通過notification來通知,并不是很靈活易用。

所以在這里推薦的是另一個Framework,同樣來自github(雖然以前是放在google code的)的tumtumtum/audjustable 。與上面的Framework相比較,支持了ARC,并且是使用delegate來發送狀態改變通知,比較符合我的習慣。也有播放隊列等高級功能,不過我沒有使用過這功能,所以就不做評論了。

具體的使用還是比較簡單的,看一看對應的示例工程就好了。

2. 后臺播放

首先需要引用系統Framework – AVFoundation,然后在AppDelegate的應用啟動事件里面添加以下代碼:

1

2

3

4

5

6

AVAudioSession *session = [AVAudioSession sharedInstance];

if ([session setCategory:AVAudioSessionCategoryPlayback error:nil]) {

  if ([session setActive:YES error:nil]) {

    NSLog(@"后臺播放準備完畢");

  }

}

當然這段代碼一般來說都會執行成功的,所以可以去掉if直接寫成這樣:

1

2

3

AVAudioSession *session = [AVAudioSession sharedInstance];

[session setCategory:AVAudioSessionCategoryPlayback error:nil]

[session setActive:YES error:nil]

AVAudioSessionCategoryPlayback是用來指定支持后臺播放的,相關的其它枚舉可以自行查閱Apple的開發文檔。

當然代碼添加完了之后并不是就已經可以后臺播放了,還需要在info-plist文件里面注明我們的應用需要支持后臺運行。打開info-plist,添加Required background modes項,再把Item 0編輯成audio按回車,xCode會自動補全內容:

iOS音頻流播放、后臺播放、遠程控制、鎖屏封面等總結

這時候應用就可以在后臺播放音頻了。需要一提的是模擬器不支持后臺播放,所以需要拿真機來測試。另外,網絡歌曲的后臺播放很容易斷,這個目前我也沒有找到好的解決方案。

3. 遠程控制

支持后臺播放了之后,不回到應用里還是不可以對音頻的播放進行控制,而且耳機的按鈕功能也不管用,這個還是很不方便的。我們接下來需要做的就是向系統注冊遠程控制(Remote Control),在播放音頻的ViewController里添加以下代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

- (void)viewWillAppear:(BOOL)animated

{

  [super viewWillAppear:animated];  

  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

  [self becomeFirstResponder];

}

 

- (void)viewWillDisappear:(BOOL)animated

{

  [super viewWillDisappear:animated];  

  [[UIApplication sharedApplication] endReceivingRemoteControlEvents];

  [self resignFirstResponder];

}

 

- (BOOL)canBecomeFirstResponder

{

  return YES;

}

這樣就完成了注冊工作,需要控制生效的話還需要對不同的remote control事件進行響應,修改下面的代碼并添加到自己的工程里:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

- (void)remoteControlReceivedWithEvent:(UIEvent *)event

{

  if (event.type == UIEventTypeRemoteControl) {

        switch (event.subtype) {

            case UIEventSubtypeRemoteControlTogglePlayPause:

                [self resumeOrPause]; // 切換播放、暫停按鈕

                break;

 

            case UIEventSubtypeRemoteControlPreviousTrack:

                [self playPrev]; // 播放上一曲按鈕

                break;

 

            case UIEventSubtypeRemoteControlNextTrack:

                [self playNext]; // 播放下一曲按鈕

                break;

 

            default:

                break;

        }

    }

}

完成了這些之后,在多任務狀態欄里就可以看到我們的應用注冊成功了,這些按鈕和耳機按鈕也都可以正常使用。不過關于耳機的插拔事件,遠程控制是處理不了的,需要關注這個的請自行搜索相關教程。

iOS音頻流播放、后臺播放、遠程控制、鎖屏封面等總結

4. 鎖屏封面

很多音樂app在鎖屏的時候可以顯示當前播放曲目的封面和一些信息,這個功能很實用。當然上面這個截圖里面展示的曲目標題也是要設置曲目信息之后才會顯示的。

設置曲目信息需要引用系統Framework – MediaPlayer先,然后在播放中的曲目信息改變時調用下面的方法:

1

2

3

4

5

6

7

8

9

10

11

12

- (void)configPlayingInfo

{

  if (NSClassFromString(@"MPNowPlayingInfoCenter")) {

    NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];

    [dict setObject:@"曲目標題" forKey:MPMediaItemPropertyTitle];

    [dict setObject:@"曲目藝術家" forKey:MPMediaItemPropertyArtist];

    [dict setObject:[[[MPMediaItemArtwork alloc] initWithImage:[UIImage p_w_picpathNamed:@"曲目封面.png"]] autorelease] forKey:MPMediaItemPropertyArtwork];

 

    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];

    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];

  }

}

當然還有其它很多屬性可以設置,自己查看一下剩余的key就可以,設置完就可以在鎖屏界面看到你的曲目封面了。

至此,一個簡單的音樂播放類app就可以基本完成了,更多細節就需要你自己去修改了。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

原阳县| 沅陵县| 府谷县| 阿勒泰市| 兰溪市| 博野县| 大同县| 桑日县| 长宁县| 海伦市| 唐山市| 左贡县| 新民市| 德格县| 出国| 阳西县| 读书| 连云港市| 临夏市| 交城县| 郎溪县| 巴中市| 宜宾市| 台中县| 广河县| 景泰县| 德兴市| 芜湖市| 林口县| 平谷区| 昭觉县| 临桂县| 法库县| 玛多县| 招远市| 新源县| 宁远县| 棋牌| 桂东县| 凤山市| 新乡市|