首頁(yè) 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 12561|回復(fù): 0
上一主題 下一主題
[教程]

第三十七講:Android傳感器編程入門

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
>  本講內(nèi)容:Android傳感器編程入門,分別包括加速度傳感器(accelerometer),陀螺儀(gyroscope),環(huán)境光照傳感器(light),磁力傳感器(magnetic field),方向傳感器(orientation),壓力傳感器(pressure),距離傳感器(proximity)和溫度傳感器(temperature)一、前言我很喜歡電腦,可是筆記本還是太大,筆記本電腦再小還是要弄個(gè)小包背起來的,智能手機(jī)則不同,它完全就是一個(gè)手機(jī),可以隨意裝在一個(gè)口袋里隨身攜帶。因此我在2002年左右時(shí)最喜歡玩裝備是Dell的PDA,2007年的時(shí)候最喜歡玩的是N73,而在2010年最喜歡玩的則是Milestone。眼見著手機(jī)的功能越來越強(qiáng),時(shí)至今日智能手機(jī)甚至在某些方面已經(jīng)強(qiáng)過了臺(tái)式機(jī)和筆記本。本節(jié)課講的就是智能手機(jī)強(qiáng)過臺(tái)式機(jī)和筆記本的地方:傳感器。   
   
  2008年的時(shí)候我很喜歡我的小白筆記本Macbook,喜歡玩它的一個(gè)小軟件,一拍桌子,筆記本感受到了震動(dòng),它就轉(zhuǎn)換了一個(gè)桌面出來,這讓我像個(gè)小孩子一樣沒事就拍拍桌子。這一功能這得益于蘋果筆記本內(nèi)置有傳感器。   
   
  我不知道iPhone手機(jī)是不是第一個(gè)把各種各樣的傳感器運(yùn)用在手機(jī)上的,不過我知道iPhone是把傳感器運(yùn)用在手機(jī)上最成功的第一個(gè)。隨后的Android系統(tǒng)也內(nèi)置了大量的傳感器,這讓Android系統(tǒng)手機(jī)和普通的諾基亞智能機(jī)和Windows CE智能機(jī)相比牛氣了許多,在擁有了Milestone之后,我的N73就被仍在抽屜的角落里了。   
   
  從Android1.5開始,系統(tǒng)內(nèi)置了對(duì)多達(dá)八種傳感器的支持,他們分別是:加速度傳感器(accelerometer),陀螺儀(gyroscope),環(huán)境光照傳感器(light),磁力傳感器(magnetic field),方向傳感器(orientation),壓力傳感器(pressure),距離傳感器(proximity)和溫度傳感器(temperature)。   
   
  利用這些傳感器我們可以制作出各種有趣的應(yīng)用程序和游戲。譬如在口袋里晃一晃手機(jī),手機(jī)就開始神不知鬼不覺的錄音,不要著急這個(gè)很容易做,我們?cè)诒疚牡慕Y(jié)尾就一起制作這個(gè)小應(yīng)用。   
   
  本講的學(xué)習(xí)方式還是在實(shí)戰(zhàn)中學(xué)習(xí),需要提醒的是模擬器中無法模擬傳感器,因此你需要準(zhǔn)備一款A(yù)ndroid真機(jī)才能運(yùn)行本講的例子。   
   
  二、實(shí)例:手機(jī)傳感器清單我們還是先看程序后解釋,1、創(chuàng)建一個(gè)項(xiàng)目 Lesson37_HelloSensor , 主Activity名字叫 mainActivity.java2、UI布局文件main.xml的內(nèi)容如下:   
   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">   
    <textview android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="" android:id="@+id/TextView01">   
    </textview></linearlayout>
復(fù)制代碼
  3、mainActivity.java的內(nèi)容如下:   
   
  1. package basic.android.lesson37;   
       
    import java.util.List;   
       
    import android.app.Activity;   
    import android.content.Context;   
    import android.hardware.Sensor;   
    import android.hardware.SensorManager;   
    import android.os.Bundle;   
    import android.widget.TextView;   
       
    public class MainActivity extends Activity {   
       
            /** Called when the activity is first created. */   
            @Override   
            public void onCreate(Bundle savedInstanceState) {   
                    super.onCreate(savedInstanceState);   
                    setContentView(R.layout.main);   
       
                    //準(zhǔn)備顯示信息的UI組建   
                    final TextView tx1 = (TextView) findViewById(R.id.TextView01);   
       
                    //從系統(tǒng)服務(wù)中獲得傳感器管理器   
                    SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);   
       
                    //從傳感器管理器中獲得全部的傳感器列表   
                    List<sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);   
       
                    //顯示有多少個(gè)傳感器   
                    tx1.setText("經(jīng)檢測(cè)該手機(jī)有" + allSensors.size() + "個(gè)傳感器,他們分別是:
  2. ");   
       
                    //顯示每個(gè)傳感器的具體信息   
                    for (Sensor s : allSensors) {   
       
                            String tempString = "
  3. " + "  設(shè)備名稱:" + s.getName() + "
  4. " + "  設(shè)備版本:" + s.getVersion() + "
  5. " + "  供應(yīng)商:"   
                                            + s.getVendor() + "
  6. ";   
       
                            switch (s.getType()) {   
                            case Sensor.TYPE_ACCELEROMETER:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 加速度傳感器accelerometer" + tempString);   
                                    break;   
                            case Sensor.TYPE_GYROSCOPE:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 陀螺儀傳感器gyroscope" + tempString);   
                                    break;   
                            case Sensor.TYPE_LIGHT:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 環(huán)境光線傳感器light" + tempString);   
                                    break;   
                            case Sensor.TYPE_MAGNETIC_FIELD:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 電磁場(chǎng)傳感器magnetic field" + tempString);   
                                    break;   
                            case Sensor.TYPE_ORIENTATION:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 方向傳感器orientation" + tempString);   
                                    break;   
                            case Sensor.TYPE_PRESSURE:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 壓力傳感器pressure" + tempString);   
                                    break;   
                            case Sensor.TYPE_PROXIMITY:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 距離傳感器proximity" + tempString);   
                                    break;   
                            case Sensor.TYPE_TEMPERATURE:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 溫度傳感器temperature" + tempString);   
                                    break;   
                            default:   
                                    tx1.setText(tx1.getText().toString() + s.getType() + " 未知傳感器" + tempString);   
                                    break;   
                            }   
                    }   
       
            }   
    }</sensor>
復(fù)制代碼
  
   
4、連接真機(jī)Milestone,編譯并運(yùn)行程序,顯示結(jié)果如下:
  
5、結(jié)合上面的程序我們做一些解釋。
Android所有的傳感器都?xì)w傳感器管理器 SensorManager 管理,獲取傳感器管理器的方法很簡(jiǎn)單:   
   
String service_name = Context.SENSOR_SERVICE;   
   
SensorManager sensorManager = (SensorManager)getSystemService(service_name);
現(xiàn)階段Android支持的傳感器有8種,它們分別是:   
傳感器類型常量</div

上一篇:android兩個(gè)頁(yè)面?zhèn)髦堤幚?/a>
下一篇:
百度地圖開發(fā)之覆蓋物(overay)

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-10-19 14:33 , Processed in 0.073894 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表