如何检查 Android 设备是否具有语音功能

4

有没有人知道一种良好的编程方式来检查安卓设备(手机或平板电脑)是否具有语音功能?所谓语音功能是指能够打电话的能力。我知道有些设备,比如北美的Galaxy Tab,就没有这个功能。

4个回答

3

虽然我自己没有尝试过,但看起来你需要的详细信息应该在TelephonyManager中:

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

   return true;
}

2
我尝试了这种方法,在没有语音通话功能的 Galaxy Tab 上,它返回 PHONE_TYPE_GSM。 - Flav
这样怎么样:telephonyManager.getLine1Number() == null。你需要READ_PHONE_STATE权限。 - mag382
1
Galaxy Tab 甚至有电话号码。 - Flav

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);
            }
        }
    });

0
我会认为如果没有麦克风可用,prepare() 将失败:
  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) {}

0
理论上,您应该能够使用Intent.resolveActivity来实现此目的。特别是在Galaxy平板电脑上存在一个问题(在这里描述)。它们显然报告具有呼叫功能。您甚至可以成功解析意图。不幸的是,它解析为无操作活动。

我希望得到更具体的东西,比如可以使用TelephonyManager的内容... - Flav
1
Mark Murphy在我链接的那个帖子中提出的关键点是:“一些Android 2.x平板电脑(如Galaxy Tab)可能声称具有电话功能,即使它们没有拨号器,以符合Android Market的要求。除了使用android.os.Build来按制造商和型号识别这些设备外,我不知道还有什么其他方法可以告诉你。”不幸的是,没有更好的答案。您可以在Galaxy上进行的每个软件测试都会告诉您它具有电话功能,即使它实际上并没有。 - Ted Hopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接