老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

ios電臺開發,ios 電臺

手機端ios和android瀏覽器 如何實現mms廣播電臺在線音頻播放?

從軟件的功能角度來講,Mms分為對話列表,消息列表,短信編輯,彩信編輯,短信顯示,彩信顯示和配置。

十余年的寧陽網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整寧陽建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“寧陽網站設計”,“寧陽網站推廣”以來,每個客戶項目都認真落實執行。

從實現的角度來看,它分為GUI展示層,發送/接收,彩信解析,彩信附件,信息數據等,這些分類對應著源碼中的各種包。

源碼導航

Mms的源碼的位置在于android/packages/apps/Mms

其中Mms/src/com/android/mms里面都是Mms相關的代碼,而Mms/src/org/w3c/dom里面是一個類庫,主要用于彩信格式的解析和顯示。這里主要講一下Mms/src/com/android/mms下面的一些包和類的主要用途。

ui---GUI展示層,用于展示對話列表,消息列表,消息編輯頁,彩信附件編輯,彩信展示,播放幻燈片。負責直接與用戶交互。

?ConversationListAdapter.java---對話列表的Adapter用于給顯示層ConversationList綁定數據。

?ConversationListItemData.java---代表對話列表中的每一項的數據結構,里面含有要在對話列表中展示的信息。

?ConversationList.java------這是對話列表的顯示窗口Activity,它是一個ListActivity,這幾個類都是對話列表的相關類,用于顯示,編輯和管理所有的對話。

?ComposeMessageActivity.java----這個是核心的窗口Activity,編輯信息,顯示一條對話Thread中的所有往來信息。MessageListView會加在其上面,另外,AttachmentEditor也會加在其上面。這個Activity也負責響應外部應用程序,發送SENDTO或SEND等請求Intent,比如外部應用想要發送信息,等就由這個Activity來響應。

?MessageItem.java---代表一個信息的抽象數據,它包含了信息相關的所有內容,比如信息的主題,消息內容,來信地址,附件內容等等。它的所有數據都是公共的內部成員,都可以直接訪問。

?MessageListAdapter.java---用于給消息列表顯示層(由ComposeMessageActivity創建,綁定到MessageListView上)綁定數據。

?MessageListView.java---用于顯示消息列表,繼承自ListView,其生命周期由ComposeMessageActivity來控制,顯示與否也由它來控制。

?MessageListItem.java---是一個布局,用于顯示和控制消息列表中的每一個消息的顯示。

?AttachmentTypeSelectorAdapter.java---用于添加附件件時的一個支持的附件列表,它就是一個菜單。

?AttachmentEditor.java---用于在編輯MMS彩信信息時,顯示已添加的附件,它的生命周期由ComposeMessageActivity來控制,顯示與否也是由ComposeMessageActivity來控制,當有彩信附件時,它就會顯示,否則就被Hide。它是一個布局管理器,管理著下面四個布局,根據附件的類型動態的顯示下面四個View中的某一個。

?AudioAttachmentView.java---在編輯信息器中用于顯示音頻附件,它是繼承自線性布局。并不在代碼中直接使用,而是在布局文件中來當成布局管理器使用。

?ImageAttachmentView.java---在編輯信息器中用于顯示圖片附件,它是繼承自線性布局。并不在代碼中直接使用,而是在布局文件中來當成布局管理器使用。

?SlideshowAttachmentView.java---在編輯信息器中用于顯示幻燈片附件,它是繼承自線性布局。并不在代碼中直接使用,而是在布局文件中來當成布局管理器使用。

?VideoAttachmentView.java---在編輯信息器中用于顯示視頻附件,它是繼承自線性布局。并不在代碼中直接使用,而是在布局文件中來當成布局管理器使用。

?SlideshowActivity.java—用來全屏播放幻燈片,也即幻燈片的展示,因為彩信的創建和播放都是以幻燈片的方式進行的,也即一張一張的,每張上面可以文字,圖片,視頻和音頻,每一張有瀏覽時長。

?SlideshowEditActivity.java---以列表方式管理幻燈片,也即是把所有的幻燈片用列表顯示出來,用戶可添加一頁幻燈片,也可以點擊進入編輯某頁幻燈片,用于創建和編輯幻燈片。

?SlideshowEditor.java---用于編輯某頁幻燈片,比如添加元素,刪除元素和替換元素,這里的元素可以是圖片,視頻,音頻和文字。也可以用于編輯整頁幻燈片,比如刪除某頁幻燈片,調整這頁幻燈片在所有幻燈片中的位置等。它是一個具體操作幻燈片的封裝,SlideEditorActivity創建它并使用它來完成紀燈片的編輯。

?SlideshowPresenter.java---用于展示所有的幻燈片,也就是播放所有的幻燈片。由SlideshowActivity來創建和使用。

?SlideViewInterface.java---定義了一些用于顯示一頁幻燈片中的內容的接口,如設置圖像,設置視頻,設置音頻,播放視頻,播放音頻,暫停,隨機定位等等。附件顯示的View:AudioAttachmentView,ImageAttachmentView,SlideshowAttachmentView和VideoAttachmentView均實現了此接口,這樣AttachmentEditor就可以用統一的接口來控制內容的播放,而不用關心具體的內容是什么。

?SlideEditorActivity.java---用于編輯某頁幻燈片,比如添加音頻,添加視頻,添加圖像,添加文字等。它只是提供用戶界面,讓用戶來操作各種按扭以達到添加元素,替換元素或是刪除元素。而對具體的幻燈片的操作是通過SlideshowEditor來完成的,它主要負責與用戶交互。

?SlideListItemView.java--- SlideshowEditActivity中列表的每一項的布局管理,繼承自LinearLayout。

?MmsThumbnailPresenter.java---用于在消息列表中,顯示彩信的縮略圖,因為彩信的內容不固定,可能是圖片,可能是音頻,可能是視頻也可能是幻燈片,所以用這個類來處理并顯示彩信的縮略圖。

?MessagingPreferenceActivity.java---Mms的配置信息編輯器,用來編輯和更改配置信息,繼承息PreferenceActivity。它負責與用戶交互,顯示和更改配置。在Mms啟動時,MmsConfig會從SharedPreference中讀出配置信息,在運行時其他的類的配置信息都是從MmsConfig中獲取的,MmsConfig提供了很多Get方法以獲取配置信息。

?Presenter.java---用來展示附件的一個抽象類。

?PresenterFactory.java---工廠方法。

?RecipientsAdapter.java

?RecipientsEditor.java---用于顯示信息編輯頁面上面的收信人的編輯框,它可以有自動補全的功能,補全的數據由RecipientsAdapter來提供。

?ViewInterface.java---代表一個View的基類,用于Slideshow顯示內容或是取縮略圖??梢匀iew的長寬高等。

?BasicSlideEditorView.java---編輯某一頁幻燈片時所用的布局,也就是在SlideEditorActivity.java中使用。

?EditSlideDurationActivity.java---顧名思義,用于編輯某一頁幻燈片的瀏覽時長。

?ManageSimMessages.java---這個是在設置中使用的,用來管理SIM里的消息。在設置中有一項是管理SIM卡上面的消息。在Mms的設置Settings中有一個選項可以設置是把信息存儲在SIM卡,還是存儲在手機里。在收信時SmsReceiverService會查看這個設置然后把收到的信息寫到相應的地址。ManageSimMessages也是以列表方式顯示SIM里面的信息,提供了二個菜單:把信息存入手機和刪除。

?NumberPickerButton.java---用于顯示選擇數字的按扭,在配置里面用。

?NumberPickerDialog.java---用于顯示選擇數字的對話框,在配置里面用。

?NumberPicker.java---用于在配置的時候選擇數字。這幾個NumerPicker主要是用于Settings中的。

?DeliveryReportActivity.java---信息發送情況報告。以列表的方式來顯示

?DeliveryReportAdapter.java---相應的Adapter

?DeliveryReportItem.java---相應的數據,每一項的數據

?DeliveryReportListItem.java---相應每一項的布局。

data---用于操作當前正在編輯的信息的相關數據,比如聯系人列表,比如當前對話,比如當前消息。負責管理當前正在編輯的信息和當前所處的對話以及當前信息用到的聯系人。這些類都是在編輯信息的時候使用,由于這些多半都是用來管理數據的,而又無法直接做為對象傳遞給編輯器。所以它們的很多方法都是靜態的,也就是這些類都近似單鍵。

?WorkingMessage.java---用來管理當前正在編輯的消息,它從創建,草稿到發送完成后一直存在,只要打開了編輯信息的頁面就會創建一個WorkingMessage,直到退出編輯頁面。

?Conversation.java---用來管理對話Threads,通常用來管理當前的對話,也就是進入的對話和正在進行操作的對話,它也用來管理對話列表,比如查詢對話列表。

?Contact.java---用來代表一個聯系人的信息,和管理聯系人,加載聯系人信息,其中還有相應的Cache。因為一個聯系人的數據是比較多的包含名字,名,姓,各種電話號碼,各種地址等等。因為Mms中直接使用Contact來作為聯系人,所有信息都是直接從其中獲取。另外,由于信息交互中也會涉及到聯系人,因為收發信時可以直接使用一串電話號碼,這時就需要有如添加聯系人的功能。Contact中有很多異步的操作,比如加載聯系人信息的時候或者更新Cache的時候都需要異步操作以不阻塞調用者。

?ContactList.java---是一個Contact的List列表它繼承自ArrayListContact。用來管理一個Contact列表,或管理多個Contact。因為每個信息可以發送給多個聯系人,這時就需要用到ContactList來管理這些收信人。也提供了一些方便存儲和傳遞Contact的方法,比如把多個Contact轉成String,或者轉成String數組等。

?RecipientIdCache.java---用于保存所用到的Contact的Id和地址(電話)。每次WorkingMessage會更新這個Cache,然后ContactList會優先從這個Cache中查詢聯絡人。

dom---用于解析彩信內容smil的工具包

drm---用于處理DRM的媒體文件的工具包

layout---為了滿足特殊需要而改寫的布局元素

model---這里面定義了彩信支持的附件數據結構和附件的組織方式。彩信可包含的內容有圖片,視頻,音頻和文字。這些內容可以單獨存在,也可以組合在一起。如果組合在一起就變成了幻燈片。用戶可以用幻燈片的方式來創建含有多個媒體的附件,圖文并茂的展示。每張幻燈片上面可以加視頻,音頻,圖片和文字,但通常一張幻燈片上面只允許加一個圖片或視頻,文字是都可以添加的,音頻在沒有視頻的情況下只可以添加的。播放的時候可以設置每張幻燈片的播放時長,以及文字的滾動速度等等。

?CarrierContentRestriction.java---是具體的彩信附件檢查站,對于不支持的附件,或者附件大小超出限制,或者圖像分辨率不對,或者圖像超出尺寸,會拋出異常:UnsupportedContentTypeException,ResolutionException,ExceedMessageSizeException,ContentRestrictionException。

?ContentRestriction.java是用于檢查附件的接口,外部直接使用這相接口,而具體實現是CarrierContentRestriction

?ContentRestrictionFactory.java是創建附件檢查的工廠方法。外部通過這個工廠來創建一個ContentRestriction對象,然后使用其中定義的檢查方法來進行附件內部檢查。

?SmilHelper.java用于解析和處理附件中的Smil的工具類。

?IModelChangedObserver.java接口,用于監聽附件內容有變化。

?Model.java---彩信附件的數據組織方式和管理方式是每一個附件都是一個Model的子類,它不但用于管理附件的具體數據,比如Uri,大小,文件名,位置等,也可以用于在GUI顯示附件和查看附件。

?LayoutModel.java---繼承自Model用于管理可視的附件的布局的類。它用來管理RegionModel等的基本元素。它就好比ViewGroup或LinearLayout,RelativeLayout等一些布局管理器,用來組織并管理布局基本元素也就是RegionModel的子類ImageModel,TextModel和VideoModel。

?RegionModel.java---繼承自Model用于管理可視附件和布局,比如圖像,視頻和文字。特別是在顯示可視附件的時候,用于控制可視附件在屏幕中的位置。一個RegionModel代表著一張幻燈片上的一塊區域,它是幻燈片上的布局基本元素。好比UI元素中的View,但多在使用時都是使用它的子類,也就是ImageModel,TextModel和VideoModel。

?RegionMediaModel.java---繼承自MediaModel,是用于多媒體附件中的可視部分的布局控制,主要用在附件的顯示和播放幻燈片時的控制。它的子類是ImageModel,TextModel和VideoModel。

?MediaModel.java---繼承自Model,代表媒體的數據結構,管理具體的附件數據,同時也用于管理附件的顯示控制,比如圖像的顯示,音頻和視頻的播放控制等。

?MediaModelFactory.java---用于從一個Pdu附件中解析出來MediaModel,也就是把Pdu轉化為Mms內部的附件數據。

?ImageModel.java—繼承自RegionMediaModel用于管理圖像附件和控制圖像附件的顯示。

?VideoModel.java---繼承自RegionMediaModel用于管理視頻附件和控制視頻附件的播放。

?AudioModel.java----繼承自MediaModel用于管理音頻附件和控制音頻附件的播放

?SlideModel.java----繼承自Model用于管理一組附件,這些附件同一次顯示給用戶。就好像幻燈片的一片一樣,每一個SlideModel里面有一個可以存儲Model的列表,可以包含文字,音頻,圖像或視頻,其上面的附件同時顯示出來。

?SlideshowModel.java---繼承自Model,用于管理一個彩信中的所有附件。其內含有一個存儲SlideModel的列表,用于保存和控制一條彩信中的所有附件。另外它也負責顯示這些附件,把一個個SlideModel組織起來,播放。它也負責著把這些Mms形式的附件(各種Model)轉化為Android的附件Pdu,和從Pdu提出各自Model,因為Slideshow是應用程序層的彩信處理方式,而能發送和接收的彩信數據是Pdu。

?TextModel.java---繼承自RegionMediaModel用于管理文字附件和控制文字附件的顯示,比如按時間來滾動

util---這里面是整個Mms共享的工具類,其中全部都是單鍵或是直接使用類,不可以創建對象和以對象方式來使用

?AddressUtils.java---關于地址的工具類,目前只有一個getFrom()方法,用于獲取發信人地址。

?DraftCache.java---用于標識哪些對話Thread有Draft,哪些沒有,也就是用于管理和查詢對話的草稿狀態,有草稿還是沒有。它里面維護了一個HashSet,里面包含了所有含有草稿的Thread Id。它里面也有一個HashSet用于存儲OnDraftChangedListener,即當Thread的Draft狀態有變化時,DraftCache會調用相應的Listener以告知相應模塊,這個對話的草稿狀態有所變化??梢酝ㄟ^DraftCache.setDraftState(threadId, state)來設置某個對話的草稿狀態; 可以通過DraftCache.hasDraft(threadId)來查詢某個對話是否含有草稿。

?Recycler.java---是一個抽象的工具類,里面定義了SmsRecycler和MmsRecycler,用于刪除陳舊的消息,或者刪除超過信息數量限制的信息。使用方法都是Recycler.getSmsRecycler.deleteOldMessages(context) 或者Recycler.getMmsRecycler.deleteOldMessages(context)

?SmileyParser.java---把標點式的表情符號轉化為圖形的表情,比如把?用圖標笑臉來代替。

?DownloadManager.java---不要被名字騙到,它并不是真正意義上的下載管理器,因為它并不負責任何與下載文件過程或下載文件的管理。它是用于管理與下載相關的配置信息,比如是否是自動下載,以及下載過程的各種通知,比如Notification Bar和Toast提示等。

?RateController.java

?SendingProgressTokenManager.java

transaction---對于Mms來講是最底層的一個包,用戶不可見,它負責發信息的最后處理和收信息的最初處理。主要是負責發送信息和接收信息。它并不是真正的發送和接收信息。是由系統Frameworks里面來負責接收和發送信息。這個包只是對于Mms應用層來講是發送和接收。

?AbstractRetryScheme.java

?DefaultRetryScheme.java—這二個類是實現一種Retry機制,因為信息的發送與接收會受到環境的限制,比如現在手機沒信號,或是網絡連接不成功,那么就會把信息放到Pending隊列里面,等一段時間再重新嘗試發送與接收。這里的二個類就是為了實現此Retry機制。

?HttpUtils.java—彩信發送與接收的最底層實現者,它負責用HTTP協議接收和發送彩信到MMSC彩信服務中心。

?MessageSender.java—像其名字所預示的那樣,它是為了發送信息而封裝的一個接口,它里面只有一個方法sendMessage(),UI層只需要調用實現了這個接口的類即可發送信息。

?MessagingNotification.java—專門負責在Status Bar上面做Notification,比如新接收到了信息,或是信息發送失敗,或是接收失敗等。它被UI層,和底邏輯層共用著。

?MmsMessageSender.java—繼承自MessageSender,專門用于發送彩信。它并不是做發送的事情,而是做一些錯誤檢查和前期準備工作,然后啟動TransactionService來做發送相關的事情。

?NotificationTransaction.java—繼承自Transaction,負責接收彩信和更新通知(Notification)。當有一個新彩信時,Frameworks會先發出一個短信,稱作彩信通知(NotificationIndication),其內含有彩信相關的信息(MMSC, 彩信的ContentLocation(URL)等),之后是由應用程序自己去MMSC用ContentLocation取彩信。這個NotificationTransaction就是專門用于處理彩信通知的,它會從MMSC上取出彩信數據(Pdu),把它寫入數據庫中,然后更新Notification。需要注意的是,只有彩信的設置是自動獲取(“auto retrieve”)時,它才會去下載彩信,否則,它只處理彩信通知(Notification Indication),而不去下載彩信。

?Observable.java—里面定義了觀察對象,Transaction是它的一個子類,其他的實體Transaction都是觀察對象,里面有一個列表保存著觀察者的引用,當一個Transaction完成時,或是有異常時就會調用notifyObservers()方法來把狀態通知給觀察者。

?Observer.java—觀察者,TransactionService實現了這個接口。它是所有Transaction的觀察者,以監聽他們的狀態和處理結果,因為所有的Transaction都 是異步的,所以才用觀察模式來通知Transaction的處理結果。

?PrivilegedSmsReceiver.java—繼承自SmsReceiver短信收信的事件監聽者,負責監聽新短信事件android.provider.Telephony.Intents.SMS_RECEIVED_ACTION(“android.provider.Telephony.SMS_RECEIVED”);當接收到這個Intent時表明有一個新短信。它會喚起SmsReceiverServier來處理短信。

?ProgressCallbackEntity.java

?PushReceiver.java—一個BroadcastReceiver專門用于接收彩信事件android.provider.Telephony.WAP_PUSH_RECEIVED_ACTION(“android.provider.Telephony.WAP_PUSH_RECEIVED”),它會先做一些預處理,然后啟動TransactionService,TransactionService又會創建NotificationTransaction來處理這個彩信通知。

?ReadRecTransaction.java

?RetrieveTransaction.java—繼承自Transaction,用于主動獲取彩信數據。當彩信設置為非自動獲取時,需要用戶觸發獲取,TransactionService會創建一個RetrieveTransaction來獲取彩信數據(Pdu),存入數據庫,更新Notification等。

?RetryScheduler.java

?SendTransaction.java—繼承自Transaction,用于發送彩信數據。

?SimFullReceiver.java

?SmsMessageSender.java—發送短信的封裝,繼承自MessageSender。它會啟動SmsReceiverService來發送。

?SmsReceiver.java—是一個BroadcastReceiver,不要被其名字唬到,它并不負責接收新短信通知,相反,它用于發送信息,接收發送信息請求,并喚起SmsReceiverService來處理發送。這里可能是Android命名規則的原因,Android里的四大組件都喜歡把其組件的名字加上,比如ComposeMessageActivity,是一個Activity,TransactionService是一個Service,而這里SmsReceiver是一個BroadcastReceiver,它與接收短信(receiving Sms)沒有關系。當然了,這完全是一個糟糕的命名。

?SmsReceiverService.java—它是一個Service,專門用于處理短信的發送與接收。它是由SmsReceiver和PrivilegedSmsReceiver監聽事件,然后啟動它的,自己并不會監聽Intent事件。

?SmsRejectedReceiver.java

?SmsSingleRecipientSender.java—繼承自SmsMessageSender,它針對一個收信人,調用Frameworks層接口發送信息,對于Mms應用來說,這是發送短信的最后一站,對就是說對于應用來說,它會把短信發送出去。

?TransactionBundle.java—Transaction所用的一個數據結構,用于給Transaction傳送數據。

?Transaction.java—各種Transaction的基類,它里面定義了二個方法getPdu(),sendPdu()這二個方法是從MMSC取彩信數據,和向MMSC發送數據。它是對HttpUtils的一層包裝。

?TransactionService.java—是一個Service,接收各種Transaction請求,然后處理Transaction。每個Transaction都 會開啟新的線程異步的處理,所以當處理完成時又會通過Observer來通知TransactionService。

?TransactionSettings.java—彩信相關配置信息的數據結構,比如MMSC,Proxy,Port等。請求方可能會提供這些數據,如果提供就使用;否則就會從Telephony數據庫加載默認的數據,這些數據與運營商和APN的設置有關。

?TransactionState.java—標識每一個Transaction處理情況的數據結構,很簡單,只是標明處理成功還是失敗,用于Transaction回調Observer(TransactionService)時用。

還有com/android/mms根目錄下面的一些文件,其中絕大多數是定義的基類異常和一些公共的類。

?MmsApp.java---Mms Application會在應用進程啟動的時候做一些必要的初始化工作,比如配置,下載,聯系人,對話,Smiley解析器和通知等。

?MmsConfig.java---管理Mms的一些常用配置,比如彩信大小上限,彩信圖片尺寸上限,收信人的個數上限等等。這些配置信息是保存在在res/xml/mms_config.xml里面。MmsApp在初始化時會調用MmsConfig.init(),在這里面會調用loadMmsSettings來解析mms_config.xml從而得到所需要的配置信息。其他的模塊只通過MmsConfig來訪問這些配置信息。

?LogTag.java---有關日志跟蹤信息的控制。它可以方便的控制日志輸出級別。但是實際上整個Mms代碼中使用這個LogTag的地方并不多。

IOS開發要學習哪些方面的知識?

第一步:編程入門課

時間預計:4個星期

推薦看公開課,Udacity也行,網易公開課也行,自己找一個面對對象語言(一般是JAVA, C++, Python)的課。我是在網易公開課看的斯坦福的CS106A,學的JAVA。

如果你純粹學iOS開發,不推薦看哈佛CS50,CS50是給CS系的學生介紹整個計算機世界的框架,講的內容比較多,進度比較快,對iOS開發其實有點累贅了。(臣妾有點跟不上?。。。?/p>

計劃安排是一天一課,看課程要求的書(至少看完一本)及大部分作業。這一階段重點不是語法,而是以下3個目標。

目標:

1. 讓自己對編程這件事感到適應。

寫hello world。

怎么寫function, 怎么調用function。

全局變量,局部變量這類基本知識點。

都是基本的東西??纯磿瑢懚鄡蓚€程序就歐啦。

2. 掌握編程語言的基本要素。

編程語言4個要素:

a. 基本的數據類型:整數,實數,character, string, boolean

b. 基本的運算符號:+-×/++--那啥的

c. 怎樣輸入輸出

d. 怎樣控制程序:sequence,selection,loop

3. 了解編程范式

面對過程編程。

面向對象編程。

第二步:上手iOS!

時間預計:2星期

強烈推薦CS193P,老頭子講的超級好!我的很多東西(對象思維啥的)是在這里跟著做練習的時候才真正明白的(好啦,也可能是上一堂課練習做得少的原因)。如果等到9月應該itunes U上會開始教iOS 7了。網易公開課的是2010年iOS 5版的,前10堂課,也行。(iTunes U上有完整的課)

CS193P說有prerequisite,一開始被嚇到,事實證明還是可以學下去的。頭兩節課一頭霧水,沒關系,把itunes U上的課件下載下來,把所有代碼打出來,然后一個個元素對應之前學的語言匹配,再不懂先放著,繼續學后邊的,過幾天打多點代碼就懂了。

感覺學5、6堂課,一個星期左右就可以開始進入下一階段自己做東西了。之后用啥學啥,每堂課都有主題的。速度慢點的同學們,這階段跟我一樣準備兩個星期吧!

第三步:開發app!

時間預計:2星期(本人...1個半月,實在不好意思說出口)

這個時間就可長可短啦,還包括美工,交互啥的。堅持要用啥學啥的原則,其實就是知道iOS SDK都有什么組件,每個組件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有個師傅,這個階段真的是進步神速。

好的!不出意外,你的第一個app就這么新鮮出爐了!從今天開始,成為一個冷艷逼格高尚的iOS開發者吧!

ios故事軟件開發需要多少費用

IOS故事類軟件開發成本及人員:

一、IOS開發者會員年費:600元(要發布軟件必須擁有開發者會員)。

二、研發人員,費用至少需要2~5萬。

1、故事編劇、導演各1名。

2、插畫師1名。

3、程序腳本編寫人員(初級OC程序員)2~3名。

4、程序調整及BUG修復人員1~2名。

三、應用推廣、營銷費用至少需要1~3萬,如果要求效果更好的至少需要5萬。

四、后期維護費用:依據軟件運營時間,時間越長單次維護費用越低,但綜合維護費用越高。

開發使用storyboard和xib的區別

縱觀iOS發展歷程, 不管是哪種技術,都有其歷史的必然性,最終總會被一種新技術所取代。 apple 一直在引領科技的潮流,立足于浪潮之巔。

nib apps 代表了 iOS的過去, 而 storyboard apps 代表了iOS的現在和未來。 作為iOS開發者,我們既要腳踏實地,不忘過去,同時也得仰望星空,不斷地自我創新。

1. nib apps 的回顧

nib apps 中,有一個必不可少的文件: MainWindow.xib 。 app運行時,呈現在你面前的第一個畫面,就是UIWindow 對象。 而UIWindows 就是包含在 MainWindow.xib 中。

具體來講, MainWindow.xib ,UIWindow, App Delegate,root view controller ,這四者是密切關聯的。 我們要理解這四者之間的關系,方能更好地明白 storyboard apps 的運行機制。

2. storyboard apps 運行邏輯圖

在storybord apps 中, MainWindow.xib 是不存在的。 取而代之的是 main.storyboard 文件。既然如此,那么storybord又是如何加載的呢?

在創建storyboard apps 時,會自動生成幾個默認的文件, AppDelegate.h 便是其中之一。 示意如下:

import UIKit/UIKit.h

@interface AppDelegate : UIResponder UIApplicationDelegate

@property (strong, nonatomic) UIWindow *window;

@end

這些默認生成的文件, 我們要特別關注下, 弄清來龍去脈。

AppDelegate 繼承于 UIResponder,并且擁有一個 UIWindow property。 聲明的方式很簡潔。

再打開默認生成的 AppDelegate.m 文件,你會感到很詫異, AppDelegate.m 所展示的代碼幾乎為空。 所有的method 都是空的。 即使 application:didFinishLaunc hingWithOptions: , 僅僅是返回 YES, 也沒有其他代碼可言。

這就是說,不管是 AppDelegate.h 還是AppDelegate.m , 都沒看到什么玄機。 貌似龐然大物的storyboard,究竟是怎么玩的?

常言說的好,一個好漢三個幫。 僅僅查看AppDelegate.h/m ,還是遠遠不夠的, storybord 還有三個好漢。

storyboard 幫手: info.plist 文件。 如下:

nib apps VS. storyboard apps - 悠悠電臺 - 悠悠電臺iOS客戶端:幾千個國內外電臺

當storyboard apps 啟動時, 它怎么知道從哪里加載main.storyboard 文件呢? 秘密就在info.plist上。 你會看到, UIMainStoryboardFile 或 “Main storyboard file base name” 的鍵值設為了 Main。當app 啟動時,UIApplicaiton 會自動加載main.storyboard 文件。 同時,會自動加載 main.storyboard 上的第一個視圖控制器 (view controller),并且,將該 view controller 所對應的 View 加載到UIWindow 對象中。

也許你已經注意到了, app 啟動時,做了這么的工作,但我們還沒有編寫一行代碼。 storyboard技術的引進,其最大的意義在于, 大大減少與 UI相關的 代碼量。

storyboard 幫手:Deployment Info 的設置。 如下:

nib apps VS. storyboard apps - 悠悠電臺 - 悠悠電臺iOS客戶端:幾千個國內外電臺

點擊 Project settings, 可以看到Deployment Info。 你會注意到, Main Interface 也設為了 Main。 其實,這里的 Main 所指的就是 main.storyboard。

為了徹底理解 storyboard 的加載過程, 我們再來打探另一個重要的幫手。

storyboard 幫手:main.m 文件, 代碼如下:

#import UIKit/UIKit.h

#import "AppDelegate.h"

int main(int argc, char *argv[])

{

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

}

在main.m 中, 雖然語句不多,但這個語句直接決定了app 的生命周期。 這行代碼的作用是,將app delegate class 傳給 UIApplicationMain。 因為整個App 啟動和運行的入口,就在UIApplicationMain中。

iOS開發 - 語音播報功能的實現

近期項目中有個需求就是要實現類似微信或者支付寶的收款時的語音播報功能,于是筆者就開始了漫長的踩坑之路。

剛開始討論實現方案時,安卓的小伙伴說可以使用WebSocket + 訊飛語音在線合成實現。于是最初的幾天筆者自己也一直在這條路上走了很久,基本功能都已經實現了,項目在前臺的時候,基本沒問題。但是項目一進入后臺大概半分鐘的時間,就無法播報了。原因是iOS項目如果不做任何處理的話,在進入后臺大概30s之后,程序就會進入類似休眠的狀態,然后就不會再進行任何操作了

跟安卓的同事討論之后,發現安卓有方法可以讓程序一直在后臺處于活躍狀態,于是筆者也開始找尋保持項目后臺運行的方法,大概有兩種

在這里我們并沒有發現,程序在后臺收到推送時,作相應處理的方法,哪到底能不能收到推送后就進行處理呢?

iOS 10 之后 iOS推出了Notification Service Extension,我們可以在收到推送之后,通過這個Extension 我們可以有三十秒的時間來對這個推送進行處理

完成之后長這樣

然后我們配置一下NotificationService

然后我們看下NotificationService.swift文件

在完成上述操作之后,再次收到推送的話,就會走NotificationService的邏輯了,可以打斷點或者Log測試一下

需要注意的是 在推送的內容中 必須配置mutable-content字段,結構大致如下

做完上邊的操作之后,我們可以知道什么時候去播報語音了,但是語音又要怎么去播報呢?

筆者這邊也是試過幾個方案,下邊一一說來

筆者剛開始使用訊飛發現不行,然后又測試了系統自帶的AVSpeech,發現也不好用,查資料才知道,蘋果在近期的版本中,停用的在NotificationService中播放語音的功能,之前的某個版本應該可以這么操作。好吧,此方案Pass

既然不讓我播,那我存起來總可以了吧,測試發現訊飛在線生成是可以的,也可以存到本地,但。。。是,UNMutableNotificationContent的sound好像只支持提前添加到項目中的文件,并不支持立即生成之后存到本地,然后再設置的功能。。。

筆者在項目中預先生成的文件如下(語音包通過百度語音開放平臺在線生成 百度語音在下生成(拉到中間就有了) )

比如說我要播放“支付寶到賬100元”,我就會發放多個通知,依次播放wx-pre,1,bai,yuan這幾個語音,連貫起來就能達到要求

筆者能力有限,暫時想到的方法就是這個,有好的方法可以多多分享,溝通

iOS 音頻系列之一:Core Audio簡介

任何吸引人的游戲都少不了聲音。iOS開發者在游戲中需要使用聲音時有多種選擇,取決于對游戲中音頻的控制需求,可以選擇簡單的內置服務,也可以選擇更高級的API(比如OpenAL)。

通過音頻API,可以實現流式音頻,播放簡短音效,甚至模擬3d空間的音頻。有些游戲可以通過音軌讓玩家沉浸在特定的心境中玩游戲,設置鼓勵用戶使用耳機來獲得更完美的體驗。

本系列文章中,會陸續整理近幾年來在工作中涉及到的音頻的相關知識,以算做對自己知識體系的一次梳理吧,大體包括Core Audio、OpenAL 以及Cocos2d引擎中的音效部分等三個方面。

? Core Audio 是什么?

? Core Audio 中提供的音頻服務

? Core Audio 中的有關音頻框架

? 有關 Core Audio 的變化及更新

Core Audio 是什么?

Core Audio 是iOS和 MAC 的關于數字音頻處理的基礎,它提供應用程序用來處理音頻的一組軟件框架,所有關于IOS音頻開發的接口都是由Core Audio來提供或者經過它提供的接口來進行封裝的,按照官方的說法是集播放、音頻處理、錄制為一體的專業技術,通過它我們的程序可以同時錄制,播放一個或者多個音頻流,自動適應耳機,藍牙耳機等硬件,響應各種電話中斷,靜音,震動等,甚至提供3D效果的音樂播放。

相關鏈接:

Core Audio Overview

Audio Video Starting Point

Core Audio Glossary

Core Audio中提供的音頻服務

Core Audio 本身是一個很龐大的話題,涉及到多個領域中的不同服務,為了更方便的使用Core Audio,通??梢詫⑵浞指顬楦〉哪K。圖一展示了根據應用程序服務層分解的示意圖。構建在應用程序棧最下面的是底層硬件。接下來往上是驅動程序層。構建在驅動層之上的每一層都是蘋果提供給開發人員的應用層服務,包括各類音頻API和框架。

主要的幾類服務:

Audio Unit

Audio Unit 是Core Audio 在應用層中最底層的服務。在使用其他音頻API時,最終在底層都會調用到Audio Unit。在所有的API中,Audio Unit 是延遲最短且最靈活的,但代價就是它的使用相當的復雜,幸運的是在實際使用中,我們很少直接使用Audio Unit。

相關鏈接:

Audio Unit Framework Reference

相關項目工程:

Core Audio Utility Classes

Audio File Service

通過Audio File Service 提供的API可以打開并讀取或者寫入磁盤上存儲的文件。

Audio File Stream Service

它是對Audio File Service 的擴展補充。Audio File Service 對存儲到磁盤上的音頻文件進行操作,而Audio File Stream Service

并不一定關聯到某個文件上,它更適合基于網絡的音頻應用程序。

Audio Conversion Service

通過它可以將數據轉換為PCM格式或者從PCM格式轉換成數據。

Extended Audio File Service

可以將它理解為Audio File Service 和 Audio File Service 的組合。通過這種API 可以直接加在并轉換音頻文件。

Audio Session Service

和Core Audio中的其他API不同,它的主要用于 iOS 系統中協調應用程序之間的音頻播放的 API 的。例如,當有電話打進來時,音頻的播放就會被暫停;在用戶啟動電影時,音樂的播放就會停止。我們需要使用這些 API 來確保一個應用程序能夠正確響應并處理這類事件。

System Sound Service

它是一種允許播放短音效和警告的基本服務,還具有提供振動功能的獨特能力,Core Audio中的其他任何服務都不能訪問振動系統。

Audio Queue Service

它可以對播放音頻進行精細的控制,比如暫停、繼續、循環播放和音頻同步等,因此特別適合于播放和錄制持續時間很長的音頻。在游戲中進行語音敘述等情景時,需要音樂或者長時間的播放文件,便會需要它。

AVFoundation

它是Core Audio中唯一基于Objective-C的框架。這個框架提供了AVAudioPlayer類用于播放,AVAudioReconder類用于錄音,以及AVAudioSession類用于設置音頻回話。和其他高層API一樣,我們需要在易用性和功能之間做出權衡。如果在此框架中找不到我們需要的特性或者功能,那么就必須深入底層服務并直接使用底層的API。

相關鏈接:

AV Foundation Framework Reference

AV Foundation Programming Guide

Audio Session Programming Guide

相關的項目工程:

AVCaptureAudioDataOutput To AudioUnit iOS

OpenAL

和其他專用API不同,OpenAL是一個狂平臺的用于播放和捕捉音頻的工業標準。OpenAL更適合播放空間音頻(spatialized sound)或者定位音頻(positional sound)??梢詫⒖臻g音頻理解成3D空間中的聲音,通過OpanAL可以對音效添加一些效果,比如位置屬性,這樣會使遠程的聲音比近處的聲音聽起來要弱一些。

相關鏈接:

OpenAL FAQ for iPhone OS

相關的項目工程:

oalTouch

Core Audio中的有關音頻框架

Core Audio 中的服務和框架并沒有一對一的對應關系,應用層的服務實際上分為5個不同的框架:Core Audio、Audio Toolbox、Audio Unit、AVFoundtaion、OpenAL。圖二中很好的展示了這些框架和服務之間的映射關系。

Audio Unit、AVFoundation和OpenAL的框架非常明了,和他們同名的服務直接對應,其中AVFoundtion有三個Objective-C類組成:AVAudioPlayer、AVAudioRecorder和AVAudioSession。

Audio Toolbox 框架提供了前面列出的其他剩下的應用層服務,包括非常重要的Audio Session Service。

相關鏈接:

Audio Toolbox Framework Reference

其他相關框架:

Media Player Framework

它是一個用于音頻和視頻播放的高層級接口,它包含了一個可以在應用中直接使用的默認的用戶界面,可以使用它來播放用戶在 iPod 庫中的項目,或者播放本地文件以及網絡流。另外,這個框架也包括了查找用戶媒體庫中內容的 API,同時還可以配置像是在鎖屏界面或者控制中心里的音頻控件。

相關鏈接:

Media Player Framework Reference

Core MIDI Framework

提供與MIDI設備通訊的標準方式,包括硬件鍵盤和合成器??梢允褂眠@個框架來發送和接收MIDI消息以及與通過dock連接器或網絡連接到iOS設備的MIDI外設交互。

相關鏈接:

Core MIDI Framework Reference

OS 4.0以后的功能變化如下:

iOS 7.1

Support for External Media Players (CarPlay相關的)

iOS 7.0

新增 Inter-App Audio和 AudioCopy

強化 Media Player / AV Foundation Framework

棄用 Audio Toolbox framework內的Audio Session API

iOS 6.0

新增 Audio UnitのComponent

強化 Media Player / Core Media / AV Foundation Framework

iOS 5.0

新增 Audio UnitのComponent

強化 Media Player / AV Foundation / AudioToolbox Frameworks

iOS 4.3

強化 AV Foundation

強化 Media Player / Audio Unit / Audio Toolbox Frameworks

iOS 4.2

新增 Core MIDI framework

強化 Media Player Framework

新增 AirPlay

iOS 4.1

強化 AV Foundation

iOS 4.0

新增 Core Media Framework

強化 AV Foundation

相關鏈接:What's New in iOS


文章名稱:ios電臺開發,ios 電臺
路徑分享:http://www.xueling.net.cn/article/pheheo.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 久久精品理伦A级A片入口 | 精品一区二区三区免费看 | 国产极品粉嫩馒头一线天av | 国产精品99久久久久久www | 又粗又硬又黄a级毛片 | 4438ⅹ亚洲全国最大色丁香 | 天天干天天操天天干 | 欧美人与动性行为视频 | 国产无遮挡乱子伦免费精品 | 黄污视频在线免费观看 | 在线观看亚洲十八禁网站 | 久久亚洲精品小早川怜子 | 他揉捏她两乳不停呻吟人妻 | 国产色播av在线 | 91久久极品 | 人妻少妇伦在线无码 | 激情亚洲图片激情亚洲小说 | 日本道中文字幕 | 成年人视频免费在线播放 | 中国老太太WBBHD | 麻豆传媒网站在线观看 | 黄色片免费看. | 久久精品精品久久 | 中文无码AV一区二区三区 | 久久艹天天艹 | 成人性色生活片免费看爆迷你毛片 | 一级片久久久 | 性色一区二区三区 | 在线观看视频精品 | 亚洲激情第一页 | 国产无遮挡又黄又爽不要VIP网站 | 欧美国产二区 | 国产视频精品区 | 爱爱视频免费在线观看 | 亚洲精品中文字幕在线 | 精品视频一区在线 | 8ⅹ8x擦拨擦拨成人免费视频 | 色妺妺在线视频 | 亚洲中文字幕在线乱码 | 久久久久久久久久综合 | 性开放少妇xxxxⅹ视频蜜桃 |