国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区

Android特色開發之傳感器和語音識別

來源:網絡

點擊:3450

A+ A-

所屬頻道:新聞中心

關鍵詞: Android,開發,傳感器,語音識別

      Android特色開發

      Android 是一個面向應用程序開發的豐富平臺,它擁有許多具有吸引力的用戶界面元素、數據管理和網絡應用等優秀的功能。Android 還提供了很多頗具特色的接口。本文我們將分別介紹這些吸引開發者眼球的特色開發,主要包括:傳感器系統(Sensor)、語音識別技術(RecognizerIntent)、Google Map和用來開發桌面的插件(Widget)。通過本文的學習,讀者將對Android有一個更深入的了解,可以開發出一些有特色、有創意的應用程序。

      一 傳感器

      據調查,2008年全球傳感器銷售額為506億美元,預計到2010年全球傳感器銷售額可達600億美元以上。調查顯示,東歐、亞太區和加拿大成為傳感器市場增長最快的地區,而美國、德國、日本依舊是傳感器市場分布最大的地區。就世界范圍而言,傳感器市場增長最快的領域依舊是汽車,占第二位的是過程控制,當然現在也被廣泛應用于通信。那么,傳感器的定義是什么呢?有哪些種類的傳感器呢?Android中提供了哪些傳感器呢?

      1.傳感器的定義

      傳感器是一種物理裝置或生物器官,能夠探測、感受外界的信號、物理條件(如光、熱、濕度)或化學組成(如煙霧),并將探知的信息傳遞給其他裝置或器官。國家標準GB7665—87對傳感器的定義是:“能感受規定的被測量并按照一定的規律轉換成可用信號的器件或裝置,通常由敏感元件和轉換元件組成”。傳感器是一種檢測裝置,能感受被測量的信息,并能將檢測的感受到的信息,按一定規律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。它是實現自動檢測和自動控制的首要環節。

      2.傳感器的種類

      可以從不同的角度對傳感器進行分類:轉換原理(傳感器工作的基本物理或化學效應);用途;輸出信號類型以及制作材料和工藝等。

      根據工作原理,傳感器可分為物理傳感器和化學傳感器兩大類。

      物理傳感器應用的是物理效應,諸如壓電效應,磁致伸縮現象,離化、極化、熱電、光電、磁電等效應。被測信號量的微小變化都將轉換成電信號。

      化學傳感器包括那些以化學吸附、電化學反應等現象為因果關系的傳感器,被測信號量的微小變化也將轉換成電信號。

      大多數傳感器是以物理原理為基礎運作的。化學傳感器的技術問題較多,例如可靠性問題、規模生產的可能性、價格問題等,解決了這些問題,化學傳感器的應用將會有巨大增長。而有些傳感器既不能劃分為物理類,也不能劃分為化學類。

      3.Android中傳感器的種類

      Google Android操作系統中內置了很多傳感器,比如G1自帶了一個非常實用的加速感應器(微型陀螺儀),有了它,G1手機就支持重力感應、方向判斷等功能,在部分游戲或軟件中可以自動識別屏幕的橫屏、豎屏方向來改變屏幕顯示布局。下面是Android中支持的幾種傳感器:

      Sensor.TYPE_ACCELEROMETER:加速度傳感器。

      Sensor.TYPE_GYROSCOPE:陀螺儀傳感器。

      Sensor.TYPE_LIGHT:亮度傳感器。

      Sensor.TYPE_MAGNETIC_FIELD:地磁傳感器。

      Sensor.TYPE_ORIENTATION:方向傳感器。

      Sensor.TYPE_PRESSURE:壓力傳感器。

      Sensor.TYPE_PROXIMITY:近程傳感器。

      Sensor.TYPE_TEMPERATURE:溫度傳感器。

      下面我們通過一個例子來分析Android中傳感器的使用(具體實現參見本書所附代碼:第9章\ Examples_09_01),這里分析的是方向傳感器(TYPE_ORIENTATION)。

      4.Android 中傳感器的功能

      要在Android中使用傳感器,首先需要了解SensorManager和SensorEventListener。顧名思義,SensorManager就是所有傳感器的一個綜合管理類,包括了傳感器的種類、采樣率、精準度等。我們可以通過getSystemService方法來取得一個SensorManager對象。代碼如下:

      SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

      取得SensorManager對象之后,可以通過getSensorList方法來獲得我們需要的傳感器類型,保存到一個傳感器列表中。通過如下代碼可以得到一個方向傳感器:

      Listsensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

      要與傳感器交互,應用程序必須注冊以偵聽與一個或多個傳感器相關的活動。Android中提供了registerListener來注冊一個傳感器,并提供了unregisterListener來卸載一個傳感器。registerListener方法包括3個參數:第1個參數,接收信號的Listener實例;第2個參數,想接收的傳感器類型的列表(即上一步創建的List對象);第3個參數,接收頻度。調用之后返回一個布爾值,true表示成功,false表示失敗。當然,之后不再使用時,我們還需要卸載。代碼如下:

      //注冊傳感器

      Boolean mRegisteredSensor = mSensorManager.registerListener(this, sensor,

      SensorManager.SENSOR_DELAY_FASTEST);

      //卸載傳感器

      mSensorManager.unregisterListener(this);

      其中,SensorEventListener是使用傳感器的核心部分,包括以下兩個方法必須實現:

      onSensorChanged (SensorEvent event) 方法在傳感器值更改時調用。該方法只由受此應用程序監視的傳感器調用。該方法的參數包括一個SensorEvent對象,該對象主要包括一組浮點數,表示傳感器獲得的方向、加速度等信息。例如,以下代碼可以取得其值:

      float x = event.values[SensorManager.DATA_X];

      float y = event.values[SensorManager.DATA_Y];

      float z = event.values[SensorManager.DATA_Z];

      onAccuracyChanged (Sensor sensor,int accuracy) 方法在傳感器的精準度發生改變時調用。其參數包括兩個整數:一個表示傳感器,另一個表示該傳感器新的準確值。

     

      具體實現如代碼清單1所示。

      代碼清單1 \Examples_09_01\src\com\yarin\android\Examples_09_01\Activity01.java

      public class Activity01 extends Activity implements SensorEventListener

      {

      private boolean mRegisteredSensor;

      //定義SensorManager

      private SensorManager mSensorManager;

      public void onCreate(Bundle savedInstanceState)

      {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

      mRegisteredSensor = false;

      //取得SensorManager實例

      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

      }

      protected void onResume()

      {

      super.onResume();

      //接收SensorManager的一個列表(Listener)

      //這里我們指定類型為TYPE_ORIENTATION(方向傳感器)

      Listsensors = mSensorManager.getSensorList

      (Sensor.TYPE_ORIENTATION);

      if (sensors.size() > 0)

      {

      Sensor sensor = sensors.get(0);

      //注冊SensorManager

      //this->接收sensor的實例

      //接收傳感器類型的列表

      //接收的頻率

      mRegisteredSensor = mSensorManager.registerListener(this,

      sensor, SensorManager.SENSOR_DELAY_FASTEST);

      }

      }

      protected void onPause()

      {

      if (mRegisteredSensor)

      {

      //如果調用了registerListener

      //這里我們需要unregisterListener來卸載/取消注冊

      mSensorManager.unregisterListener(this);

      mRegisteredSensor = false;

      }

      super.onPause();

      }

      //當精準度發生改變時

      //sensor->傳感器

      //accuracy->精準度

      public void onAccuracyChanged(Sensor sensor, int accuracy)

      {

      //處理精準度改變

      }

      // 當傳感器在被改變時觸發

      public void onSensorChanged(SensorEvent event)

      {

      // 接收方向傳感器的類型

      if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)

      {

      //這里我們可以得到數據,然后根據需要來處理

      //由于模擬器上面無法測試效果,因此我們暫時不處理數據

      float x = event.values[SensorManager.DATA_X];

      float y = event.values[SensorManager.DATA_Y];

      float z = event.values[SensorManager.DATA_Z];

      }

      }

      }

      上面的例子中演示了如何獲得方向傳感器的方向、加速度等信息,我們可以根據得到的數值與上一次得到的數值之間的關系來進行需要的操作。SensorManager中還有很多常量和一些常用的方法,如下:

      getDefaultSensor:得到默認的傳感器對象。

      getInclination:得到地磁傳感器傾斜角的弧度值。

      getOrientation:得到設備旋轉的方向。

      getSensorList:得到指定傳感器的列表。

      二 語音識別

      語音識別技術在手機上應用得相當廣泛,我們日常最頻繁的溝通方式是語音,在手機應用中,大部分是通過硬件手動輸入,目前這依然是主要與手機互動的方式,然而對于像手機這種小巧的移動設備來說,使用鍵盤甚至是虛擬鍵盤打字是一件非常不爽的事情。于是, Google推出了強大的語音搜索業務。2008年11月,Google的語音搜索已經在iPhone平臺上線,而Android在1.5 SDK版本中也加強了語音識別功能,并應用到了搜索功能上,這的確是一個非常讓人驚喜的更新。我們只需要點擊搜索框旁邊的那個小話筒形狀的按鈕,如圖9-1所示,Android就可以通過語音識別你要搜索的內容。如果你的語音不夠清晰,Android也可以通過大體的意思來提供一些選擇,其宗旨是最大限度地改善人機交互的便捷性。相信很快會有更多人性化的功能出現在Android平臺上,比如我們在玩游戲時,可以通過語音來控制操作,讓我們期待每一次革新帶給我們的便捷吧!

      

     

      圖1 Android語音識別按鈕

      Android中主要通過RecognizerIntent來實現語音識別,它主要包括一些常量來表示語音的模式等,如表9-1所示。

      表1 RecognizerIntent包括的常量

      

     

      這里我們只需要通過Intent來傳遞一個動作以及一些屬性,然后通過startActivityForResult來開始語音,代碼如下:

      Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_

      MODEL_FREE_FORM);

      intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"開始語音");

      startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

      當然,如果找不到設置,就會拋出異常ActivityNotFoundException,所以我們需要捕捉這個異常。當然,另外需要實現onActivityResult方法,當語音結束時,會觸發來獲得語音的字符序列。下面我們通過一個例子來學習語音識別(參見本書所附代碼:\Examples_09_02),當我們點擊“開始使用語音識別”按鈕時,開始語音,然后在onActivityResult方法中取得結果并顯示出來,運行效果如圖2所示。由于在模擬器上沒有設備,所以顯示了ActivityNotFoundException異常,當我們在真機上測試、開始語音時,如圖3所示,語音結束后取出的字符序列如圖4所示。

      

     

      圖2 ActivityNotFoundException異常   圖3 開始語音                          圖4 獲取的字符序列

      該例子很簡單,具體實現如代碼清單2所示。

     

      代碼清單2 \Examples_09_02\src\com\yarin\android\Examples_09_02\Activity01.java

      public class Activity01 extends Activity

      {

      private static final int VOICE_RECOGNITION_REQUEST_CODE = 4321;

      private ListView mList;

      public void onCreate(Bundle savedInstanceState)

      {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

      mList = (ListView) findViewById(R.id.ListView01);

      Button button = (Button) findViewById(R.id.Button01);

      button.setOnClickListener(new View.OnClickListener()

      {

      @Override

      public void onClick(View v)

      {

      try

      {

      //通過Intent傳遞語音識別的模式,開啟語音

      Intent intent = new Intent

      (RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

      //語言模式和自由形式的語音識別

      intent.putExtra(RecognizerIntent.EXTRA_

      LANGUAGE_MODEL,RecognizerIntent.

      LANGUAGE_MODEL_FREE_FORM);

      //提示語音開始

      intent.putExtra(RecognizerIntent.EXTRA_

      PROMPT,"開始語音");

      //開始執行我們的Intent、語音識別

      startActivityForResult(intent,

      VOICE_RECOGNITION_REQUEST_CODE);

      }

      catch (ActivityNotFoundException e)

      {

      //找不到語音設備裝置

      Toast.makeText(Activity01.this,

      "ActivityNotFoundException",

      Toast.LENGTH_LONG).show();

      }

      }

      });

      }

      //當語音結束時的回調函數onActivityResult

      @Override

      protected void onActivityResult(int requestCode,int resultCode,Intent data)

      {

      // 判斷是否是我們執行的語音識別

      if(requestCode==VOICE_RECOGNITION_REQUEST_CODE&&resultCode==RESULT_OK)

      {

      // 取得語音的字符

      ArrayListresults = data.getStringArrayListExtra

      RecognizerIntent.EXTRA_RESULTS);

      //設置視圖更新

      //mList.setAdapter(new ArrayAdapter(this,android.

      R.layout.simple_list_item_1,results));

      String resultsString = "";

      for (int i = 0; i < results.size(); i++)

      {

      resultsString += results.get(i);

      }

      Toast.makeText(this,resultsString,Toast.LENGTH_LONG).show();

      super.onActivityResult(requestCode, resultCode, data);

      }

      }

      }

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区
    <cite id="gqusq"><tbody id="gqusq"></tbody></cite>
    <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <abbr id="gqusq"><rt id="gqusq"></rt></abbr>
  • <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <ul id="gqusq"></ul>
    <center id="gqusq"><noscript id="gqusq"></noscript></center>
  • 国产无套精品一区二区| 亚洲一区二区高清视频| 欧美日韩综合久久| 99精品欧美| 97se国产在线视频| 欧美黑人xxxxx| 欧美日韩一区二区三| 国产精品一区二区三区四区五区| 久久福利影视| 九九久久99| 欧美精品日本| 久久久999| 亚洲国产欧美一区二区三区不卡| 国内精品一区二区| 成人免费91在线看| 亚洲在线色站| 美女日韩在线中文字幕| 欧美久久久久久久| 99香蕉国产精品偷在线观看| 国产精品毛片一区视频| 亚洲在线色站| 懂色av一区二区三区在线播放| 亚洲欧美久久久久一区二区三区| 在线观看成人av| 久久视频在线观看中文字幕| 狠狠入ady亚洲精品| 韩国成人一区| 日韩午夜电影| 日韩精品久久久免费观看| 亚洲美女91| 青青成人在线| 91青青草免费观看| 欧美日韩综合网| 久久99精品久久久久久青青日本| 国产精品vip| 欧美日韩国产不卡在线看| 99国产精品视频免费观看一公开 | 黄色日韩在线| 蜜桃麻豆www久久国产精品| 99亚洲伊人久久精品影院红桃| 蜜桃网站成人| 美女诱惑黄网站一区| 欧美精品91| 欧美日韩在线精品一区二区三区| 亚洲一区久久| 国产在线观看一区| 日韩欧美精品在线不卡| 91福利视频导航| 在线国产欧美| 欧美伊人影院| 欧美一区二视频在线免费观看| 老鸭窝91久久精品色噜噜导演| 中文字幕日韩一区二区三区不卡| 91久久精品www人人做人人爽| 狠狠干成人综合网| 一区二区三区国| 国产精品免费看一区二区三区| 狠狠色综合色区| 成人一区二区三区四区| 一本一本久久a久久精品综合妖精| 久久精品国产精品国产精品污 | 国产精品一二| 综合网五月天| 日本一区二区精品| 国产三级精品在线不卡| 久久午夜视频| 噜噜噜在线观看免费视频日韩 | 欧美日韩天天操| 亚洲国产精品一区二区第一页| 国产精品日韩一区二区免费视频| 亚洲国产精品日韩| 国产精品一区二区你懂得| 国产精品地址| 午夜精品亚洲一区二区三区嫩草| 免费国产一区| 国产一区二区三区黄| 97av影视网在线观看| 久久国产精品一区二区三区| 亚洲精品一区二区三区蜜桃久| 一区二区三区视频在线播放| 欧美精品一区二区视频| 国产亚洲精品自在久久| 国产精品swag| 久久99精品久久久久久水蜜桃| 精品国产乱码久久久久久郑州公司| 久久综合狠狠| 超碰97人人在线| 99在线热播| 精品久久久久亚洲| 久久久久免费网| 欧洲亚洲一区| 一区二区视频在线观看| 亚洲午夜精品久久久中文影院av| 图片区小说区区亚洲五月| 午夜精品亚洲一区二区三区嫩草 | 免费永久网站黄欧美| 亚洲欧美日韩另类精品一区二区三区 | 国产午夜久久| 另类亚洲自拍| 国产在线精品日韩| 日韩激情久久| 欧美区亚洲区| 国产精品手机在线| 国产高清不卡av| 狼狼综合久久久久综合网| 欧美日韩电影一区二区| 亚洲综合首页| 亚洲国产专区| 久久久水蜜桃av免费网站| 久久久久久久久久久久久9999| 日本一区二区三区精品视频| 一区二区三区四区国产| 一本色道88久久加勒比精品| 先锋亚洲精品| 国产亚洲欧美一区二区| 99re在线| 老牛影视一区二区三区| 精品国产乱码久久久久久88av | 99久久精品免费看国产四区| 久久青青草综合| 国产精品高清一区二区三区| 亚洲欧美日韩国产一区二区| 国产精品高清一区二区三区| 相泽南亚洲一区二区在线播放| 亚洲国产精品一区制服丝袜| 99久久自偷自偷国产精品不卡| 相泽南亚洲一区二区在线播放| 亚洲人体大胆视频| 国产视频一区二区三区四区| 国产九色精品| 国产精品黄色| 国产乱码精品一区二区三区卡| 制服诱惑一区| 久久久久网址| 欧美高清视频一区| 国产成人成网站在线播放青青| 伊人久久大香线蕉精品| 91视频最新| 一区二区高清视频| 欧美亚洲免费| 欧美一区网站| 国内精品视频免费| 一区福利视频| 视频一区视频二区视频三区高| 亚洲一区二区毛片| 亚洲美女搞黄| 国产精品区一区二区三在线播放| 欧美日韩理论| 人禽交欧美网站免费| 麻豆av一区二区三区久久| 视频一区视频二区视频| 成人xxxxx色| 在线亚洲观看| 成人黄动漫网站免费| 日本一区二区三区视频在线播放 | 国产亚洲毛片在线| 亚洲欧美精品在线观看| 国产激情一区二区三区在线观看| 亚洲天堂激情| 亚洲一区3d动漫同人无遮挡 | 久久久影院一区二区三区| 亚洲一区二区四区| 欧美天天视频| 亚洲精品电影在线一区| 国产精品香蕉视屏| 久久一区欧美| 亚洲综合丁香| 亚洲日本欧美| 在线观看视频免费一区二区三区| 五月天色一区| 午夜免费电影一区在线观看| 国产亚洲自拍偷拍| 国产在线成人| 亚洲欧美国产精品桃花| 亚洲美女少妇无套啪啪呻吟| 中文字幕中文字幕99| 欧美韩国日本精品一区二区三区| 午夜亚洲视频| 亚洲综合国产| 亚洲欧美日韩视频二区| 亚洲激情一区二区| 在线日韩av| 亚洲国产网站| 夜夜嗨av一区二区三区网站四季av| 国精品一区二区| 欧美性色综合| 狠狠色噜噜狠狠色综合久| 国产一区美女| 一区久久精品| 亚洲精品字幕| 国产伦精品一区二区三区视频黑人| 亚洲狼人精品一区二区三区| 激情欧美国产欧美| 99精品99| 久久久久99| 国产日韩一区二区| 日韩免费av电影| 欧美国产专区| 影音先锋亚洲电影| 午夜在线观看免费一区|