2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  1引言4</b></p><p><b>  1.1編寫(xiě)目的4</b></p><p><b>  1.2適用范圍4</b></p><p><b>  2功能概述4

2、</b></p><p><b>  3 總體設(shè)計(jì)5</b></p><p>  3.1 界面組成5</p><p><b>  3.2界面式樣5</b></p><p>  3.2.1歡迎界面5</p><p>  3.2.2登錄界面6</p&g

3、t;<p>  3.2.3綜合功能界面7</p><p>  3.2.3.1相機(jī)界面8</p><p>  3.2.3.1.1錄像界面9</p><p>  3.2.3.1.2照片預(yù)覽和快速分享界面9</p><p>  3.2.3.2電話界面10</p><p>  3.2.3.3 分享界面

4、11</p><p><b>  總覽12</b></p><p><b>  4模塊設(shè)計(jì)13</b></p><p><b>  概覽13</b></p><p>  4.1模塊1.拍照13</p><p>  4.2模塊2.攝影16<

5、/p><p>  4.3模塊3.電話16</p><p>  4.4模塊4.局域網(wǎng)分享18</p><p><b>  5錯(cuò)誤記錄22</b></p><p><b>  5.1概覽22</b></p><p>  5.1.1Android6.0以上動(dòng)態(tài)申請(qǐng)權(quán)限的問(wèn)題2

6、2</p><p>  5.1.2Android7.0以上Uri傳值的問(wèn)題22</p><p>  5.1.3Socket通信文件不完整22</p><p>  5.2拍照界面錯(cuò)誤記錄22</p><p>  5.2.1手動(dòng)設(shè)置照片尺寸出錯(cuò)22</p><p>  5.2.2連拍調(diào)用startCapture()

7、報(bào)錯(cuò)23</p><p>  5.3錄像界面錯(cuò)誤記錄23</p><p>  5.3.1自定義的SurfaceView的問(wèn)題23</p><p>  5.3.2 拍攝沒(méi)有影像,只有聲音的問(wèn)題23</p><p><b>  5.4其他23</b></p><p>  5.4.1獲取的lo

8、cation為null的問(wèn)題23</p><p><b>  6 參考文檔24</b></p><p>  6.1 CSDN論壇:解決手動(dòng)設(shè)置照片尺寸出錯(cuò)24</p><p>  6.2慕課網(wǎng):Android攝像頭基礎(chǔ)24</p><p>  6.3 CSDN博客:24</p><p>

9、  6.4新浪博客24</p><p><b>  其他書(shū)籍24</b></p><p><b>  1引言</b></p><p><b>  1.1編寫(xiě)目的</b></p><p>  Android高級(jí)應(yīng)用開(kāi)發(fā)系統(tǒng)練習(xí)及使用</p><p>&

10、lt;b>  1.2適用范圍</b></p><p>  該設(shè)計(jì)書(shū)適用于移動(dòng)開(kāi)發(fā)平臺(tái),軟件要求在adroid5.0以上,目前通過(guò)華為榮耀V8測(cè)試,其他機(jī)型是否限制未知.</p><p><b>  2功能概述</b></p><p>  頁(yè)面登錄(圖形動(dòng)畫(huà)實(shí)現(xiàn))</p><p>  用戶登錄驗(yàn)證(數(shù)據(jù)存

11、儲(chǔ)SQLite)</p><p>  傳感器信息自動(dòng)采集(recevice)</p><p>  相機(jī)拍照&錄像&預(yù)覽(多媒體技術(shù))</p><p>  電話功能(撥號(hào),短信,郵件)</p><p>  分享(QQ,微信) 局域網(wǎng)內(nèi)分享</p><p>  針對(duì)界面動(dòng)畫(huà),數(shù)據(jù)存儲(chǔ),自動(dòng)控制,多媒體技術(shù)進(jìn)

12、行開(kāi)發(fā)設(shè)計(jì),通過(guò)相機(jī)、電話、分享功能實(shí)現(xiàn)基本需求操作。</p><p><b>  3 總體設(shè)計(jì)</b></p><p><b>  3.1 界面組成</b></p><p><b>  3.2界面式樣</b></p><p><b>  3.2.1歡迎界面</

13、b></p><p><b>  3.2.2登錄界面</b></p><p>  3.2.3綜合功能界面</p><p>  3.2.3.1相機(jī)界面</p><p>  3.2.3.1.1錄像界面</p><p>  3.2.3.1.2照片預(yù)覽和快速分享界面</p><p

14、>  3.2.3.2電話界面</p><p>  3.2.3.3 分享界面</p><p><b>  總覽</b></p><p><b>  4模塊設(shè)計(jì)</b></p><p><b>  概覽</b></p><p><b>  4

15、.1模塊1.拍照</b></p><p><b>  功能說(shuō)明</b></p><p><b>  GPS及電池信息</b></p><p>  通過(guò)點(diǎn)擊右上角的嘆號(hào)圖標(biāo)(ImageView)控制GPS和電池信息的展示面板(TextView)的visibility屬性選擇信息面板的有無(wú)</p>&

16、lt;p><b>  拍照</b></p><p>  快速點(diǎn)擊中間的拍照按鈕會(huì)拍攝一張照片并跳轉(zhuǎn)到此照片的預(yù)覽和快速分享界面</p><p><b>  連拍</b></p><p>  長(zhǎng)按中間的拍攝按鈕會(huì)連續(xù)拍照,通過(guò)按鈕上方的進(jìn)度條(ProgressBar)來(lái)展示最大的拍攝數(shù)量(10張)以及當(dāng)前的進(jìn)度<

17、/p><p><b>  倒計(jì)時(shí)拍照</b></p><p>  點(diǎn)擊左下方的時(shí)鐘按鈕會(huì)彈出對(duì)話框(自定義View的AlertDialog)請(qǐng)求輸入倒計(jì)時(shí)拍攝的時(shí)間,默認(rèn)5秒,確定后倒計(jì)時(shí)完成會(huì)拍攝一張照片并跳轉(zhuǎn)到預(yù)覽和快速分享界面</p><p><b>  觸摸對(duì)焦</b></p><p>  點(diǎn)擊

18、預(yù)覽界面(SurfaceView)的任意位置可以對(duì)焦,為了避免不同線程之間搶奪相機(jī)資源,在任何一種拍攝模式下都不允許對(duì)焦</p><p><b>  2)處理流程</b></p><p><b>  涉及的文件:</b></p><p>  CameraActivity.java、PictureActivity.java、

19、activitycamera.xml、counter_time_dialog.xml</p><p><b>  流程說(shuō)明:</b></p><p>  CameraActivity實(shí)現(xiàn)SurfaceHolder.Callback接口,在Activity的onCreate方法中初始化控件,給拍照按鈕添加OnTouch監(jiān)聽(tīng)事件</p><p> 

20、 在Activity的onResume方法中初始化相機(jī)和SurfaceView綁定并開(kāi)始預(yù)覽</p><p>  當(dāng)拍照按鈕的event.getAction() == MotionEvent.ACTION_DOWNs時(shí)開(kāi)啟一個(gè)新的線程進(jìn)行拍照</p><p>  線程sleep 50ms通過(guò)Handler發(fā)送消息跟新一次進(jìn)度條,每個(gè)10*50ms時(shí)再sleep 1000ms拍照一次,最多可

21、拍10張,所以單拍和連拍是一塊實(shí)現(xiàn)的,只是按下按鈕時(shí)間的長(zhǎng)短</p><p>  倒計(jì)時(shí)拍照:在提交了倒計(jì)時(shí)時(shí)間之后也是新開(kāi)線程接收了提交的時(shí)間(s),在線程中對(duì)時(shí)間t 循環(huán)sleep–- 操作倒計(jì)時(shí)完成調(diào)用camera. takePicture()完成拍攝</p><p>  拍攝的照片在Camera.PictureCallback()對(duì)象中進(jìn)行重命名并存儲(chǔ)并通過(guò)Intent發(fā)送路徑信息

22、給PictureActvity,若是連拍則發(fā)送最后一張照片的信息</p><p>  在Activity的onPause方法中釋放相機(jī)資源</p><p><b>  其他:</b></p><p>  GPS和手機(jī)電池的信息:在CameraActivity的onCreate方法中新開(kāi)線程,無(wú)線循環(huán)獲取InfoProvider中的公有靜態(tài)變量G

23、PSInfo和batteryInfo并通過(guò)Handler發(fā)送消息刷新Info面板,而batteryInfo數(shù)據(jù)的刷新取自系統(tǒng)廣播,GPSInfo的刷新依賴LocationListener. onLocationChanged()函數(shù)</p><p><b>  代碼</b></p><p><b>  4.2模塊2.攝影</b></p>

24、;<p><b>  1)功能說(shuō)明</b></p><p><b>  拍攝視頻</b></p><p>  點(diǎn)擊底部中間的三角形按鈕(ImageView)開(kāi)始拍攝,隨即按鈕變成停止按鈕(改變了background屬性),點(diǎn)擊停止拍攝</p><p>  定時(shí)拍攝(指定要拍攝的時(shí)長(zhǎng))</p>&

25、lt;p>  在按鈕是三角形狀態(tài)時(shí)長(zhǎng)按會(huì)彈出對(duì)話框(自定義View的AlertDialog)請(qǐng)求定時(shí)拍攝的時(shí)長(zhǎng),點(diǎn)擊確定開(kāi)始拍攝,倒計(jì)時(shí)完成停止拍攝</p><p><b>  觸摸對(duì)焦</b></p><p>  點(diǎn)擊預(yù)覽界面(SurfaceView)的任意位置可以對(duì)焦,為了避免不同線程之間搶奪相機(jī)資源,在任何一種拍攝模式下都不允許對(duì)焦</p>

26、<p><b>  2)處理流程</b></p><p><b>  涉及的文件:</b></p><p>  RecorderActivity.java、activity_recorder.xml、CameraPreview.java、counter_time_dialog.xml</p><p><b&

27、gt;  流程說(shuō)明:</b></p><p>  Activity的onCreate方法中給錄制按鈕注冊(cè)onClick和onLongClick事件,onResume方法中初始化相機(jī)和SurfaceView資源</p><p>  在onClick中判斷如果沒(méi)有正在倒計(jì)時(shí)拍攝則允許拍攝,調(diào)用startRecorder函數(shù)開(kāi)始拍攝,在startRecorder函數(shù)中調(diào)用了prepa

28、reMediaRecorder函數(shù)判斷是否已經(jīng)準(zhǔn)備妥當(dāng),如果是開(kāi)始拍攝。或者調(diào)用stopRecording函數(shù)停止拍攝</p><p>  計(jì)時(shí)拍攝:在onLongClick中新開(kāi)線程,先從開(kāi)始和結(jié)束分別通過(guò)Handler發(fā)送消息控制相機(jī)拍攝和停止</p><p>  Activity的onPause方法中釋放相機(jī)資源</p><p><b>  其他:&

29、lt;/b></p><p>  通過(guò)自定義類CameraPreview繼承SurfaceView實(shí)現(xiàn)SurfaceHolder.Callback接口,在onPause中新建一個(gè)對(duì)象并添加到父容器中,注意添加之前移除之前的SurfaceView</p><p><b>  代碼</b></p><p><b>  4.3模塊3.

30、電話</b></p><p><b>  1)功能說(shuō)明</b></p><p><b>  打電話</b></p><p>  點(diǎn)擊上方的電話號(hào)碼面板(TextView)清空當(dāng)前的號(hào)碼,打擊下方的數(shù)字鍵(TextView)進(jìn)行號(hào)碼輸入,限制輸入11位數(shù)字,點(diǎn)擊右下角撥號(hào)按鈕(ImageView)撥打號(hào)碼面板中的

31、電話</p><p><b>  發(fā)短信</b></p><p>  在短息輸入內(nèi)容輸入框(EditText)中輸入短信內(nèi)容,點(diǎn)擊左下角的發(fā)送按鈕(ImageView)發(fā)送將會(huì)請(qǐng)求發(fā)送短信到號(hào)碼面板中的號(hào)碼,點(diǎn)擊確定發(fā)送短信,若發(fā)送成功會(huì)有回執(zhí)</p><p><b>  2)處理流程</b></p><

32、;p><b>  涉及的文件:</b></p><p>  PhoneActivity.java、activity_Phone.xml</p><p><b>  流程說(shuō)明:</b></p><p>  定義全局變量sPhoneNum 、sMessage,在onCreate中給10個(gè)數(shù)字按鍵和撥打電話、發(fā)送短信的按鈕

33、添加onClick事件監(jiān)聽(tīng),給sPhoneNum的顯示面板TextView添加textChange事件監(jiān)聽(tīng)</p><p>  點(diǎn)擊10個(gè)數(shù)字鍵改變sPhoneNum的顯示面板的內(nèi)容,通過(guò)監(jiān)聽(tīng)事件更新sPhoneNum的值</p><p>  點(diǎn)擊撥號(hào)鍵調(diào)用系統(tǒng)的action撥打電話</p><p>  點(diǎn)擊發(fā)送按鈕獲取短信內(nèi)容面板和sPhoneNum的值并彈出確認(rèn)

34、對(duì)話框,點(diǎn)擊positiveButton調(diào)用SmsManager.sendTextMessage函數(shù)發(fā)送短信</p><p><b>  其他:</b></p><p>  通過(guò)注冊(cè)廣播接收器來(lái)接收短信發(fā)送成功和對(duì)方成功接收的回執(zhí)</p><p><b>  代碼</b></p><p>  4.4

35、模塊4.局域網(wǎng)分享</p><p><b>  1)功能說(shuō)明</b></p><p><b>  發(fā)送文件和接受文件</b></p><p>  點(diǎn)擊下發(fā)的“選擇文件”按鈕從系統(tǒng)程序中選擇文件,選擇之后上方會(huì)有已選擇文件:***和準(zhǔn)備發(fā)送:***的通知,在選擇文件上方的輸入框中輸入要發(fā)送的目標(biāo)IP(要求在同一局域網(wǎng)內(nèi)),I

36、P地址可以在界面頂部得知,可以發(fā)送文件給自己。點(diǎn)擊發(fā)送按鈕,對(duì)方會(huì)有收到新文件的通知,點(diǎn)擊確定開(kāi)始發(fā)送文件,對(duì)方開(kāi)始接收文件,雙方會(huì)有進(jìn)度提示,點(diǎn)擊拒絕則不發(fā)送文件。發(fā)送方同一時(shí)間只能發(fā)送一個(gè)文件,但是接收方可以同時(shí)接收多個(gè)文件。</p><p><b>  2)處理流程</b></p><p><b>  涉及的文件:</b></p>

37、;<p>  SocketManager.java、LANShareActivity.java、activity_lanshare.xml</p><p><b>  流程說(shuō)明:</b></p><p>  在Activity的onCreate方法中獲得本機(jī)IP(調(diào)用SocketManger的靜態(tài)方法getIPAdress,其中使用了WifiManage

38、r取得的ip)和設(shè)備型號(hào)顯示在頂端</p><p>  在Activity的onCreate方法中新開(kāi)線程調(diào)用SocketManager.initServerSocket初始化ServerSocket開(kāi)始監(jiān)聽(tīng),initServerSocket方法中循環(huán)監(jiān)聽(tīng)發(fā)送端的請(qǐng)求,監(jiān)聽(tīng)到請(qǐng)求會(huì)新開(kāi)線程處理請(qǐng)求同時(shí)又開(kāi)始新的監(jiān)聽(tīng),這是實(shí)現(xiàn)接收方可以同時(shí)接收多個(gè)文件的原因,但是并沒(méi)有處理同時(shí)接收多個(gè)文件的UI,所以并不提倡這樣做

39、</p><p>  通過(guò)startActivityForResult來(lái)請(qǐng)求系統(tǒng)已存在中的文件選擇器,通過(guò)onActivityResult處理選擇的文件得到絕對(duì)路徑并發(fā)送message讓Handler更新UI使發(fā)送按鈕可用,點(diǎn)擊發(fā)送按鈕開(kāi)始發(fā)送</p><p>  發(fā)送方首先會(huì)發(fā)送文件的路徑信息給接收方,接收方收到請(qǐng)求會(huì)先判斷接收到的是文件的路徑信息還是文件的數(shù)據(jù),如果是路徑信息,先從信息

40、中獲取到文件名,通過(guò)Handler發(fā)送文件名到主線程,主線程中彈出AlertDialog請(qǐng)求接收方用戶的同意,此時(shí)子線程(ServerSocket線程)循環(huán)sleep1000ms等待主線程的回應(yīng),當(dāng)用戶同意,ServerSocket線程跳出循環(huán)發(fā)送數(shù)據(jù)給發(fā)送方Socket同意的信息,發(fā)送方Socket收到同意信息開(kāi)始發(fā)送一個(gè)文件標(biāo)志符之后發(fā)送文件數(shù)據(jù),同時(shí)發(fā)送message給主線程更新發(fā)送有關(guān)UI,接收方通過(guò)這個(gè)文件標(biāo)識(shí)符判斷是文件名(

41、沒(méi)有此標(biāo)識(shí)符的是文件名)還是文件數(shù)據(jù),若是文件數(shù)據(jù)則直接接收并發(fā)送message給主線程更新接收有關(guān)UI</p><p><b>  代碼</b></p><p><b>  5錯(cuò)誤記錄</b></p><p><b>  5.1概覽</b></p><p>  5.1.1An

42、droid6.0以上動(dòng)態(tài)申請(qǐng)權(quán)限的問(wèn)題</p><p>  從Android 6.0(API 23)開(kāi)始,允許用戶在應(yīng)用運(yùn)行時(shí)決定是否允許權(quán)限,而不是在應(yīng)用安裝的時(shí)候。這種方法簡(jiǎn)化了應(yīng)用的安裝過(guò)程,因?yàn)橛脩粼诎惭b或更新應(yīng)用的時(shí)候不需要允許權(quán)限。(參考6.3)</p><p>  5.1.2Android7.0以上Uri傳值的問(wèn)題</p><p>  從Android

43、 7.0開(kāi)始,一個(gè)應(yīng)用提供自身文件給其它應(yīng)用使用時(shí),如果給出一個(gè)file://格式的URI的話,應(yīng)用會(huì)拋出FileUriExposedException。這是由于谷歌認(rèn)為目標(biāo)app可能不具有文件權(quán)限,會(huì)造成潛在的問(wèn)題(參考6.3)</p><p>  5.1.3Socket通信文件不完整</p><p>  ServerSocket收到客戶Socket發(fā)送的數(shù)據(jù)時(shí)我對(duì)收到的數(shù)據(jù)開(kāi)頭做了判斷

44、,導(dǎo)致開(kāi)頭做判斷的這些字節(jié)丟失,選擇的解決方案是在發(fā)送文件之前發(fā)送一個(gè)文件標(biāo)志位,以區(qū)分服務(wù)器接收到的是文件名還是文件內(nèi)容。</p><p>  5.2拍照界面錯(cuò)誤記錄</p><p>  5.2.1手動(dòng)設(shè)置照片尺寸出錯(cuò)</p><p>  解決方法(參考6.1)</p><p>  Size pictureSize = supportedP

45、ictureSizes.get(0);// 從List取出Size</p><p>  parameters.setPictureSize(pictureSize.width, pictureSize.height);// 設(shè)置照片的大小</p><p>  camera.setParameters(parameters);</p><p>  設(shè)置的是支持的pic

46、ture size的第一組size,這個(gè)一般是camera支持的最小size,你可以將supportedPicrutreSIzes遍歷一下,找到最大的size</p><p>  5.2.2連拍調(diào)用startCapture()報(bào)錯(cuò)</p><p>  解決方法(參考6.3.1)</p><p>  每次拍攝前都要重新設(shè)置預(yù)覽,即調(diào)用自定義的startPreview(

47、)</p><p>  setStartPreview(camera,CameraActivity.this.holder);</p><p>  camera.takePicture(null,null,null,pictureCallback);</p><p>  5.3錄像界面錯(cuò)誤記錄</p><p>  5.3.1自定義的Surfa

48、ceView的問(wèn)題</p><p>  注意每次在SurfaceView重建之后必定要往父容器里添加,但此時(shí)應(yīng)注意在這之前要移除之前的SurfaceView對(duì)象,即:</p><p>  sPreview = new CameraPreview(this,sCamera);</p><p>  sPreviewViewContainer.removeAllViews

49、();sPreviewViewContainer.addView(sPreview);</p><p>  否則會(huì)出現(xiàn)不可預(yù)估的錯(cuò)誤</p><p>  5.3.2 拍攝沒(méi)有影像,只有聲音的問(wèn)題</p><p><b>  解決辦法(參考)</b></p><p>  發(fā)現(xiàn)音視頻格式參數(shù)設(shè)置的問(wèn)題,這里采用工具類來(lái)設(shè)置

50、參數(shù),即</p><p>  mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P));</p><p><b>  5.4其他</b></p><p>  5.4.1獲取的location為null的問(wèn)題</p><p>

51、;  解決辦法(參考6.4)</p><p>  從監(jiān)聽(tīng)事件處取得location的值可以保證不為空</p><p><b>  6 參考文檔</b></p><p>  6.1 CSDN論壇:解決手動(dòng)設(shè)置照片尺寸出錯(cuò)</p><p>  6.2慕課網(wǎng):Android攝像頭基礎(chǔ)</p><p> 

52、 6.3 CSDN博客:</p><p>  Android自定義相機(jī)實(shí)現(xiàn)N連拍</p><p>  Android 6.0開(kāi)始動(dòng)態(tài)請(qǐng)求權(quán)限 </p><p>  Android筆記:解決Android 7.0 FileUriExposedException url異常 </p><p>  Android自定義錄像(一)之錄像功能實(shí)現(xiàn)(附d

53、emo源碼) </p><p>  通過(guò)URI獲取的文件路徑為null的解決方法 (Android4.4以上通過(guò)URI獲取文件真實(shí)路徑)</p><p><b>  6.4新浪博客</b></p><p>  android獲取位置location為null的問(wèn)題</p><p><b>  其他書(shū)籍</

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論