2011-05-25 119 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); 
      } 
     } 
    }); 
相关问题