1.個人分工
1.1需求分析階段
1.撰寫綜合描述,包括產△品狀況、功能、設計與實現上的限制。
2.產品LOGO設計。
1.2系統設計階段
1.撰寫模塊與代碼設計,包括算法設計、數據結構設計等。
2.撰寫軟件測試。
1.3系統編碼階段
1.對於寫廢的一版,與佘華揚一起完成客戶端開發工作。
2.對於引用第三方開發平臺的一版:
(1)學習如何在第三方平臺上集成。
(2)完成“牽伴”好友體系集成,包括獲取好友列表,監聽好友列表等。
(3)完成“牽伴”其他功能的收尾集∴成工作。
(4)與佘華揚一起完成UI美工。
1.4系統測試與交付階段
1.與小組成員共同進行測試。
2.完成後續內部外部測試相關工作。
2.遇到的問題及解決辦法
2.1Android環境搭建
JDK的安裝和配置
|
JDK設置對應三個環境變量
|
Eclipse的安裝
|
解壓安裝
|
Android的SDK文件的下載和安裝
|
需把tool路徑添加到path環境變量
|
Android 的ADT的安裝
|
Eclipse的插件安裝,把Eclipse和sdk關聯起來
|
最後設置
|
Eclipse設置SDK安裝位置;創建AVD(Android 虛擬器)
|
eclipse的版本與ADT、SDK的版本必須是匹配的。無論是⌒ 低版本的eclipse安裝高版本的ADT還是,高版本的eclipse安裝低版本的ADT,在安裝過】程中都會出現conflict而導致不能安裝,即使安裝過程能夠順利通過,也屬於安裝不成功,因為在打開eclipse後,eclipse界面當中沒有AVD安裝成功後應出現的一組功能按鈕。
如果eclipse安裝了對應版本的ADT。而與SDK版本不匹配,則有可能出現在eclipse在新建android project項目時,找不到android平臺版本的情況。
2.2平臺選擇
最初小組打算用Android studio進行開發,但是全部成員在安裝AS之後電腦都卡,甚至有時打開一個項目需要一兩個小時,而且作為新手被SDK版本更新之後出現的種種問題弄心力交瘁,恨不得把所有版本都一次下全,但是最終還是有一系列問題。
基於以上,小組最終還是選擇了熟悉的Eclipse。雖然Eclipse不是專門針對Android開發的平臺,一些功能的配置比較繁瑣,但我們的電腦都“帶的動”。
2.3模擬器
因安卓模擬器運行太慢,每次啟動需要大量時間。
所以我們選擇了VirtualBox+genymotion的方式進行運行測試。
2.3第一版
做第一版(最終廢掉)時,在技術問題上遇到了較多難題。作為一個新手,我們對Android完全不了解。所以我組決定通過網絡課程來學習安卓開發的基本流程。比如說學著先創建一個最簡單的Hello world程序,然後大致了解應用程序的布局文件,java文件,配置文件等放在哪個文件夾等。
組員找到一本Android入門的電子書,我們按照著書上的代碼,模仿學習。從寫一個簡單的頁面開始,實現簡單的事件。
下面將描述遇到的具體問題(不完全):
表2.2.1 問題1
報錯:
|
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
|
場景:
|
啟動彈窗就報錯
|
原因:
|
我的彈窗應使用系統級懸浮窗,但代碼中使用了應用級的懸浮窗
|
解決方案:
|
換回合適定義的彈窗即可。
|
表2.2.2 問題2
報錯:
|
java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged
|
場景:
|
一打開有viewpager的頁面就報錯
|
原因:
|
在更新adapter的內容後調用一下adapter的notifyDataSetChanged方法,否則在ADT22以上編譯程序就會報錯。
|
解決方案:
|
每次內容改變後都調用adater的 notifyDataSetChanged方法
|
表2.2.3 問題3
報錯:
|
Link of class 'Landroid/support/v7/widget/RecyclerView;' failed
|
場景:
|
使用RecyclerView編譯不報錯,進入RecyclerView的界面就報錯
|
原因:
|
詳細細節暫時未知,v7和v4版本不對應,v7要用的部分類v4包沒有,經導入v7源碼到項目確認的,會有類引用不到。使用網上提供的demo包裏面的jar包也會報錯。
|
解決方案:
|
sdk\extras\android\m2repository\com\android\support\recyclerview-v7\22.1.1 目錄下的recyclerview-v7-22.1.1-sources.jar 解壓拿源碼到src目錄下
|
表2.2.4 問題4
報錯:
|
Android界面布局層次過多問題
|
場景:
|
如題
|
原因:
|
使用了TabHost+activity比使用viewpager+fragment多三層布局,這三層布局主要是來自於activity三層父布局。
|
解決方案:
|
除了改用fragment之外還有其他一些技巧可以砍掉兩層,最終內容上層布局只剩5層,而大部分手機能支持到12層左右,這樣整個布局內容的限制就大大減少了
|
表2.2.5 問題5
報錯:
|
Android handler 使用sendEmptyMessage發送消息時總是不會觸發消息處理
|
場景:
|
如題
|
原因:
|
需要handleMessage這個方法才會處理題中提到的方法發出的消息,dispatchMessage才是對應Message.obtain(handler, “”).sendToTarget()這種方法『的,而且一個handler裏面不能同時繼承這兩個方法,這方面需要繼續了解原因。
|
解決方案:
|
集成對應方法做處理即可。
|
表2.2.6 問題6
報錯:
|
經常出現退出activity後退出桌面的問題
|
場景:
|
如題
|
原因:
|
應該和使用了getBaseContext方法獲取Context並在啟動activity時使用了intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)建了一個︼棧
|
解決方案:
|
使用Activity.this取代getBaseContext
|
表2.2.7 問題7
報錯:
|
去除ScrollView,ListView,GridView邊緣模糊效果
|
場景:
|
題中三種控件都默認帶有邊緣模糊效果,就是再這些控件滑動時,跟其他空間的交界處會出現一種半透明的模糊效果,這種效果默認比較寬,影響了原本界面的觀感。
|
原因:
|
這個是系統控件默認的效果,我們可以通過設置去掉。
|
解決方案:
|
可以通過下面第一句代碼設置豎直方向的模糊效果關閉,第二句可以設置顏色,第三句可以設置寬度。
setVerticalFadingEdgeEnabled(false);
setCacheColorHint(Color.RED);
setFadingEdgeLength(4);
也可以再xml中設置這個屬性
android:fadingEdge=“none"
這個效果可以分開豎直和水平方向設置是否啟用。
|
表2.2.8 問題8
報錯:
|
ScrollView 嵌套 GridView最後一行被顯示不全
|
場景:
|
如題
|
原因:
|
未知。
|
解決方案:
|
gridview設置一點paddingBottom可以解決問題,連paddingBottom都可以顯示完整。
|
表2.2.9 問題9
報錯:
|
Android 如何讓EditText不自動獲取焦點
|
場景:
|
EditText在進入界面後會搶占焦點,在界面再次顯示後會再次搶占焦點。
|
原因:
|
未知。
|
解決方案:
|
android:windowSoftInputMode=“stateHidden" 再manifest.xml設置activity後第一次進入就不會在搶占焦點,但是要返回界面後不會再次搶占就需要 在EditText的父級的同級控件註意不是父級控件中找一個,設置成 android:focusable="true" android:focusableInTouchMode=“true”,這樣就會截斷其的搶占行為。
|
還有在實現發送語音消息上的問題,語音開發難點:
(1)低延遲,語音通話對延時非常敏感
(2)降低噪聲、回聲消除,靜音檢測(省流量)
(3)無服務器,去中心化,全雙工P2P通信
我們在網上搜了一些關於語音功能的實〓現方式,但是在了解完其實現流程後,不能正確有效地與項目現有的功能結合,由於技術有限,在浪費大量時間後還是不能將語音功能和原來寫好的功能完全融合。且最後發現選擇的開發方式不合適,遂這版作廢∏。慘!
2.4環信版
表2.3.1 問題1
報錯:
|
android環信語音通話無法撥『通bug
|
場景:
|
如題
|
原因:
|
當主叫這方撥打語音通話過程中,斷網,導致ERROR_TRANSPORT(也會執行onCallStateChanged(DISCONNNECTED, ERROR_TRANSPORT))斷開連接,之後 再連接上網絡撥打電話,此時無法撥通對方,返回過來的ERROR 總是ERROR_BUSY和REJECTED。
|
解決方案:
|
關於斷網掛斷的問題,客戶可以監控網絡連接,當網絡斷開時,調用掛斷API;但是另一方收不到掛斷通知,所以還會保持通話狀態,所以再連上網時無法撥通對方,因為對方還處在通話狀態。
|
2.4.1集成登錄以及集成登錄
集成環信的時候,大部分的api基本都是以代理方法來實現,環信本來也是基於XMPPFramework框架←來開發的。添加代理一定不要忘了移除代理。
當第一次登錄的時,這個時候isAutoLogin的屬性為NO,加載登錄界面,當退出以後,在後臺將這個應用程序退出(殺死),這時候再次進入,此時isAutoLogin的屬性值為Yes那麽直接加載主界面。
當自動登錄時,是向服務器發送的異步請求,只有當自動登錄成功以後,才會去顯示主界面,才會去加載“聯系人列表”“會話列表”等。
在環信的官網文檔上也能看到環形給我們提供了一個代理方法,當我們自動登錄無論是否成功,都會回調這個代理方法。
2.4.2集成環信的EaseUI
把EaseUI拖進來的時候會報錯。
這個是因為用到了UIKit裏的類,但是只導入了Foundation框架,這個錯誤在其他類裏也會出現,可以手動修改Founfation為UIKit,但是我不建議這麽做,第一這個做法的工程量比較大, 在其他類裏面也要導入,二,不利於移植,當以後環信更新的時候我們還是需要做同樣的操作,最好是創建一個pch文件,在pch文件裏面導入UIKit。
2.4.3庫沖突
在集成這個UI之前,就已經使用cocoapods導入了MBprogressHUD,這裏又引入EaseUI,就會造成沖突,這個時候的解決方法其實很簡單:把EaseUI中的MBProgressHUD刪除就可以了。
2.4.4調用出錯
在集成“EaseConversationListViewController”會話列表是時♀,繼承自控制器DHConversationController,在這個裏面試著去調用環信暴露出來的代理方法,數據源方法等,發現調用失敗, 界面也不顯示。
解決辦法如下:
在DHConversationController添加如下代碼
(void)viewDidLoad {
[super viewDidLoad];
[self tableViewDidTriggerHeaderRefresh];}