2011-05-25 98 views
4

有沒有人知道通過programmaticaly檢查Android設備,手機或平板電腦是否具有語音功能的好方法? 通過語音功能我的意思是打電話的能力。我知道有些設備,比如北美的Galaxy標籤,沒有這個功能。如何檢查Android設備是否具有語音功能

回答

0

從理論上講,您應該可以使用Intent.resolveActivity來做到這一點。有一個問題(描述here)特別是Galaxy選項卡。他們顯然報告說他們有呼叫能力。你甚至可以成功解決一個意圖。不幸的是,它解決了一個沒有操作的活動。

+0

我跳的更具體的像TelephonyManager什麼東西可以用來... – FiDo 2011-05-25 20:14:28

+1

所作的關鍵點馬克墨菲在我鏈接到的線索是這樣的:「一些Android 2.x平板電腦,如銀河標籤,可能聲稱有電話,即使他們沒有撥號,爲了有資格進入Android電子市場。 android.os.Build通過製造商和型號來識別這些,我不知道你還能說什麼。「不幸的是,沒有更好的答案。您可以在Galaxy上進行的每項軟件測試都會告訴您它具備電話功能,即使它不是。 – 2011-05-25 21:57:31

3

我還沒有嘗試過這個自己,但它看起來像你需要將在TelephonyManager細節:

private boolean hasPhoneAbility() 
{ 
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    if(telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) 
     return false; 

    return true; 
} 
+0

我會試一試。謝謝。 – FiDo 2011-05-25 20:26:06

+2

我嘗試了這種方法,對於Galaxy Tab,沒有語音通話功能,它返回PHONE_TYPE_GSM。 – FiDo 2011-05-25 20:30:24

+0

這個怎麼樣:telephonyManager.getLine1Number()== null。您需要權限READ_PHONE_STATE – mag382 2011-05-25 20:42:49

0

我假設編制(),如果沒有麥克風可用會失敗:

mRecorder = new MediaRecorder(); 
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mRecorder.setOutputFile(audio_file); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    try { 
     mRecorder.prepare(); 
     mRecorder.start(); 
    } catch (Exception e) {} 
1

我知道這個問題被張貼在很久以前,但我仍然認爲我會後我想出瞭解決方案的工作對我來說,到目前爲止,只是這樣的人同樣的問題都能受益。 (因爲很多人似乎很難找到解決方案)。

我剛剛檢查了設備的語音信箱號碼,顯然如果它沒有一個,那麼它不是一個電話。在我的代碼,來檢查這一點,它是tm.getVoiceMailNumber();

這裏就是我所做的:

callButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
      String ableToMakePhoneCalls = tm.getVoiceMailNumber(); //check device for voicemail number (null means no voicemail number). 

      if(ableToMakePhoneCalls == null){ //If the device does not have voicemail, then it must not be a phone. So it can't call. 

       //I displayed an alert dialog box here 


      } 
      else{ 

       String phoneNum = "tel:8885554444"; 

       Intent intentPhone = new Intent(android.content.Intent.ACTION_CALL); 
       intentPhone.setData(Uri.parse(phoneNum)); 

       startActivity(intentPhone); 
      } 
     } 
    }); 
相關問題