基于安卓平臺(tái)的指南針的實(shí)現(xiàn)課程設(shè)計(jì)報(bào)告.doc
《基于安卓平臺(tái)的指南針的實(shí)現(xiàn)課程設(shè)計(jì)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于安卓平臺(tái)的指南針的實(shí)現(xiàn)課程設(shè)計(jì)報(bào)告.doc(26頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、HEFEI UNIVERSITY 課程設(shè)計(jì)報(bào)告系 別 電子信息與電氣工程系 專 業(yè) 10級(jí)通信(2)班 姓 名 麻主席、張知奧、章飛 題 目 基于安卓平臺(tái)的指南針的實(shí)現(xiàn) 學(xué) 號(hào) 1005073020 指 導(dǎo) 老 師 李祎 完 成 時(shí) 間 2014年1月4日 摘要:基于安卓平臺(tái)實(shí)現(xiàn)指南針的基本功能。本文主要介紹本組如何通過模擬器在電腦上實(shí)現(xiàn)指南針應(yīng)用的主要過程關(guān)鍵詞:安卓、傳感器、指南針安卓簡(jiǎn)介Android一詞的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造
2、的真正開放和完整的移動(dòng)軟件。目前,最新版本為Android 2.4 Gingerbread和Android 3.0 Honeycomb。 Android是基于Linux開放性內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng)。 Android早期由原名為Android的公司開發(fā),谷歌在2005年收購Android.Inc后,繼續(xù)對(duì)Android系統(tǒng)開發(fā)運(yùn)營,它采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。 2011年初數(shù)據(jù)顯示,僅正式上市兩年
3、的操作系統(tǒng)Android已經(jīng)超越稱霸十年的塞班系統(tǒng),使之躍居全球最受歡迎的智能手機(jī)平臺(tái)?,F(xiàn)在,Android系統(tǒng)不但應(yīng)用于智能手機(jī),也在平板電腦市場(chǎng)急速擴(kuò)張,在智能MP4方面也有較大發(fā)展。采用Android系統(tǒng)主要廠商包括臺(tái)灣的HTC,(第一臺(tái)谷歌的手機(jī)G1由HTC生產(chǎn)代工)美國摩托羅拉,SE等,中國大陸廠商如:魅族(M9),華為、中興、聯(lián)想、藍(lán)魔等。搭建Android開發(fā)平臺(tái)1 下載軟件nJDK1.5+到http:/ 安裝軟件和配置環(huán)境2.1 安裝JDK下載好的JDK是一個(gè)可執(zhí)行安裝程序,雙擊安裝。假設(shè)安裝路徑為:C:/ProgramFiles/Java/jdk1.6.0_05(當(dāng)然其他路徑
4、也可以)。JDK安裝完成之后要設(shè)置系統(tǒng)環(huán)境變量:我的電腦點(diǎn)右鍵,選擇“屬性”,選擇“高級(jí)”標(biāo)簽,進(jìn)入環(huán)境變量設(shè)置。環(huán)境變量設(shè)置,分別設(shè)置三個(gè)環(huán)境變量:JAVA_HOME、path變量、classpath變量。2.1.1 設(shè)置JAVA_HOME在系統(tǒng)環(huán)境變量那一欄中點(diǎn)-新建JAVA_HOME(JAVA_HOME指向的是JDK的安裝路徑)。 變量名:JAVA_HOME;變量值:C:/ProgramFiles/Java/jdk1.6.0_05設(shè)置JAVA_HOME量的目的:l為了方便引用,比如,JDK安裝C:/ProgramFiles/Java/jdk1.6.0_05目錄里,則設(shè)置JAVA_HOME
5、為該目錄路徑,那么以后要使用這個(gè)路徑的時(shí)候,只需輸入%JAVA_HOME%即可,避免每次引用都輸入很長的路徑串;l歸一原則,當(dāng)JDK路徑改變的時(shí)候,僅需更改JAVA_HOME的變量值即可,否則,就要更改任何用絕對(duì)路徑引用JDK目錄的文檔,要是萬一沒有改全,某個(gè)程序找不到JDK,后果是可想而知的-系統(tǒng)崩潰!l第三方軟件會(huì)引用約定好的JAVA_HOME變量,不然,你不能正常使用該軟件.2.1.2 設(shè)置path變量在系統(tǒng)變量里找到path變量,選擇-編輯;(里面已經(jīng)有很多的變量值,是在變量值的最前面或其他位置加上%JAVA_HOME%/bin;)。變量名:path;變量值:%JAVA_HOME%/b
6、in;目的:使得我們能夠在系統(tǒng)中的任何地方運(yùn)行java應(yīng)用程序,比如javac、java、javah等,這就要找到我們安裝JDK的目錄,比如我們的JDK安裝在C:/ProgramFiles/Java/jdk1.6.0_05目錄下,那么在C:/ProgramFiles/Java/jdk1.6.0_05/bin目錄下就是我們常用的java應(yīng)用程序,我們就需要把C:/jdk1.6.0/bin這個(gè)目錄加到path環(huán)境變量里面。2.1.3 設(shè)置classpath環(huán)境在系統(tǒng)環(huán)境變量那一欄中點(diǎn)-新建classpath。變量名:classpath;變量值:.;%JAVA_HOME%/lib/;%JAVA_HO
7、ME%/jre/lib/(注意,CLASSPATH最前面是有個(gè)“.”的,表示當(dāng)前目錄,這樣當(dāng)我們運(yùn)行javaAClass的時(shí)候,系統(tǒng)就會(huì)先在當(dāng)前目錄尋找AClass文件了。)2.1.4 JDK環(huán)境測(cè)試配置完成下面寫一個(gè)簡(jiǎn)單的java程式來測(cè)試J2SDK是否已安裝成功:publicclassHelloWorld publicstaticvoidmain(Stringargs) System.out.println(Helloworld!); 將程式保存為文檔名為HelloWorld.java的文檔。打開命令提示符窗口,進(jìn)入到HelloWorld.java所在目錄,鍵入下面的命令:javacHel
8、loWorld.javajavaHelloWorld2.2 安裝Eclipse將下載的Eclipse壓縮包解壓到相應(yīng)的安裝目錄即可。2.3 配置Android環(huán)境2.3.1 安裝AndroidDevelopmentTools(ADT)插件啟動(dòng)eclipse,選擇:HelpSoftwareUpdatesFindandInstall.在彈出的對(duì)話框中選擇第二個(gè)選項(xiàng):Searchfornewfeaturestoinstall,點(diǎn)擊next,進(jìn)入下一步。選擇NewRemoteSite,在彈出的對(duì)話框中鍵入遠(yuǎn)程站點(diǎn)的名字(任意,如AndroidPlugin),以及站點(diǎn)的URL:https:/dl- 應(yīng)用
9、AndroidSDK到eclipse在Eclipse工具欄中,選擇:Window-Preferences.左邊菜單中選中android,在右邊瀏覽框中選擇sdk的解壓目錄作為sdklocation,點(diǎn)擊Apply,然后點(diǎn)擊OK即可3 參考資料:http:/ Activity_main.xml程序: 此時(shí)acticity_main顯示界面為二、 MainActivity.java程序:package pass;import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEve
10、nt; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; public class MainActivity extends Activity implements SensorEvent
11、Listener private ImageView imageView; SensorManager mSensorManager; private float currentDegree=0f; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.Imageview); mSensorManage
12、r=(SensorManager)getSystemService(SENSOR_SERVICE); SuppressWarnings(deprecation)Override protected void onResume() mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); super.onResume(); Override protected void onPause() mSen
13、sorManager.unregisterListener(this); super.onPause(); Override protected void onStop() mSensorManager.unregisterListener(this); super.onStop(); Override public void onAccuracyChanged(Sensor arg0, int arg1) SuppressWarnings(deprecation)Override public void onSensorChanged(SensorEvent event) int senso
14、rtype=event.sensor.getType(); switch(sensortype) case Sensor.TYPE_ORIENTATION: float degree=event.values0; RotateAnimation ra=new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); ra.setDuration(200); imageView.startAnimation(ra); currentDegree=-
15、degree; break; 3、 compass Manifest.xml 其中值得注意的有以下幾點(diǎn):1. compass的project2. Imageview添加傳感器的類型各種類型的傳感器:1.加速度傳感器 Sensor.TYPE_ACCELEROMETER:返回手機(jī)設(shè)備在X,Y,Z三個(gè)方向上的加速度.2.磁場(chǎng)傳感器,Sensor.TYPE_MAGNETIC_FIELD:,返回周圍磁場(chǎng)在手機(jī)的X,Y,Z方向上的影響(磁場(chǎng)分量).3.陀螺儀感應(yīng)器:Sensor.TYPE_GYROSCOPE:4.光線傳感器 Sensor.TYPE_LIGHT:返回周圍光的強(qiáng)度,單位是勒克斯lx5.距離感應(yīng)
16、器Sensor.TYPE_PROXIMITY: 6.重力傳感器Sensor.TYPE_GRAVITY:7.線性加速傳感器Sensor.TYPE_LINEAR_ACCELERATION:8.旋轉(zhuǎn)向量傳感器Sensor.TYPE_ROTATION_VECTOR:9.方向傳感器:Sensor.TYPE_ORIENTATION:返回三個(gè)值,第一個(gè)為和正北方向的角度,沿Z軸旋轉(zhuǎn),0表示正北,90度表示正東,180表示正南,270表示正西.第二個(gè)值繞X軸傾斜,水平屏幕向上,返回0,抬起手機(jī)頂部時(shí),值開始減小,范圍0-180,從手機(jī)底部開始抬起,值范圍為0180.第三個(gè)值為手機(jī)左側(cè)或者右側(cè)翹起的高度.沿著Y
17、軸傾斜,范圍是-9090,水平放置為0,從左側(cè)抬起,會(huì)從0到-90,從右側(cè)開始抬起,范圍為090.10.Sensor.TYPE_TEMPERATURE:溫度傳感器,返回?cái)z氏度.11.Sensor.TYPE_PRESSURE壓力傳感器,代表手機(jī)設(shè)備周圍壓力的大小雖然AndroidSDK定義了十多種傳感器,但并不是每一部手機(jī)都完全支持這些傳感器。傳感器的使用Android提供的API中對(duì)于不同傳感器的調(diào)用都是用同一個(gè)接口,這樣編程起來顯得非常簡(jiǎn)單。先得到傳感器的控制器,然后注冊(cè)你感興趣的感應(yīng)事件,代碼如下SensorManager SensorManager = (SensorManager)ge
18、tSystemService(Context.SENSOR_SERVICE); /注冊(cè)方位角傳感器,感應(yīng)事件的周期是0.12s產(chǎn)生一次報(bào)告 mSensorManager.registerListener(mListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_NORMAL );如果想要獲得其他感應(yīng)事件,只需要修改第二個(gè)參數(shù)為相應(yīng)的傳感器對(duì)應(yīng)的枚舉數(shù)值,第三個(gè)參數(shù)是感應(yīng)事件的頻率,設(shè)置感應(yīng)事件頻率,有四種頻率模式可選,每個(gè)相差0.04s。然后設(shè)置一個(gè)監(jiān)聽器,利用監(jiān)聽接口onSensorChanged來讀取具體
19、感應(yīng)的內(nèi)容public void onSensorChanged(int sensor, float values) if (Config.DEBUG) Log.d(TAG, 極方位角azimuth, + values0); Log.d(TAG, 傾斜角pitch, + values1); Log.d(TAG, 轉(zhuǎn)角roll, + values2); 指南針應(yīng)用代碼片段,雙擊復(fù)制package com.ijowett.example.SystemService; import java.util.List; import android.app.Activity; import android
20、.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.hardware.Sensor; import android.hardware.SensorListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.C
21、onfig; import android.util.Log; import android.view.View; public class Compass extends Activity private static final String TAG = Compass; private SensorManager mSensorManager; private SampleView mView; private float mValues; private final SensorListener mListener = new SensorListener() public void
22、onSensorChanged(int sensor, float values) if (Config.DEBUG) Log.d(TAG, sensorChanged ( + values0 + , + values1 + , + values2 + ); mValues = values; if (mView != null) mView.invalidate(); public void onAccuracyChanged(int sensor, int accuracy) / TODO Auto-generated method stub ; Overrideprotected voi
23、d onCreate(Bundle icicle) super.onCreate(icicle); mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); List sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); Log.d(TAG, There are + sensors.size() + sensors.); for(Sensor sens : sensors) Log.d(TAG, Sensor name: + sens.getTy
24、pe(); Log.d(TAG, Sensor name: + sens.getName(); mView = new SampleView(this); setContentView(mView); Overrideprotected void onResume() if (Config.LOGD) Log.d(TAG, onResume); super.onResume(); mSensorManager.registerListener(mListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_GAME
25、); Overrideprotected void onStop() if (Config.LOGD) Log.d(TAG, onStop); mSensorManager.unregisterListener(mListener); super.onStop(); private class SampleView extends View private Paint mPaint = new Paint(); private Path mPath = new Path(); private boolean mAnimate; private long mNextTime; public Sa
26、mpleView(Context context) super(context); / Construct a wedge-shaped path mPath.moveTo(0, -50); mPath.lineTo(-20, 60); mPath.lineTo(0, 50); mPath.lineTo(20, 60); mPath.close(); Override protected void onDraw(Canvas canvas) Paint paint = mPaint; canvas.drawColor(Color.WHITE); paint.setAntiAlias(true)
27、; paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.FILL); int w = canvas.getWidth(); int h = canvas.getHeight(); int cx = w / 2; int cy = h / 2; canvas.translate(cx, cy); if (mValues != null) canvas.rotate(-mValues0); canvas.drawPath(mPath, mPaint); Overrideprotected void onAttachedToWindow()
28、mAnimate = true; super.onAttachedToWindow(); Overrideprotected void onDetachedFromWindow() mAnimate = false; super.onDetachedFromWindow(); 傳感器監(jiān)測(cè)裝置感受測(cè)量信息按規(guī)律轉(zhuǎn)換為電信號(hào)或其他形式的信息輸出自動(dòng)監(jiān)測(cè)和自動(dòng)控制Android 支持的傳感器:1.方向傳感器2.磁場(chǎng)傳感器3.溫度傳感器4.光感傳感器5.壓力傳感器獲取SensorManager對(duì)象getSysteService(Context.SENSOR_SERVICE)獲取傳感器類型getDefa
29、ultSensor(int type)注冊(cè)傳感器registerListener()模擬完成上述代碼操作后,運(yùn)行:模擬器待機(jī)畫面模擬器主界面模擬器程序界面模擬器compass效果圖模擬器compass運(yùn)行界面功能1、高精確度:專業(yè)航海指針,精確指南。2、流暢操作:流暢的羅盤旋轉(zhuǎn),專業(yè)的傳感器去噪處理,讓您的指南針更精準(zhǔn)。 3、智能校準(zhǔn):智能的校準(zhǔn)提示(8字型環(huán)繞設(shè)備),提升您的指南針設(shè)備的精確度。 4、磁北正北:輕松的磁北正北轉(zhuǎn)換。 5、誤差校正:允許手動(dòng)輸入地磁偏角??偨Y(jié)通過這次課程設(shè)計(jì),我對(duì)Android程序設(shè)計(jì)有了新的認(rèn)識(shí),尤其是傳感器方面,弄懂了許多基礎(chǔ)理論,不過自己還有很多方面不足。在這個(gè)循序漸進(jìn)的過程中,解決了一些自己的認(rèn)為比較難的地方后我又繼續(xù)朝前行進(jìn)著。課程設(shè)計(jì)終于在我們小組的努力下做完了。我更加深入的了解了Android的特點(diǎn)以及一些相關(guān)知識(shí)。與其臨淵羨魚,不如退而結(jié)網(wǎng)。這次Android課程設(shè)計(jì)給我的最大的印象就是如果自己有了興趣,就動(dòng)手去做,在你的勇氣和毅力下,困難是抬不了頭的。如果你連失敗都不怕了,那你還怕什么,拾起懶惰的心,勤奮就會(huì)走向成功。這次的課程設(shè)計(jì)在我未來的時(shí)日里,是一個(gè)標(biāo)桿,因?yàn)樗嬖V了我,只要我努力沒有什么事我做不好的。最后我要感謝李祎老師對(duì)我們的辛勤培養(yǎng),謝謝參考網(wǎng)址1.http:/
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案