如何检查SDK版本的电话和相机可用性<五

时间:2011-06-24 08:18:08

标签: android camera telephony

检查摄像头和电话硬件可用性的标准方法仅适用于SDK> = 5:

PackageManager pm = this.getPackageManager();
boolean hasTelephony=pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
boolean hasCamera=pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);

我需要运行时定义SDK 3(Android 1.5)中电话和摄像头的可用性

有什么想法吗?

P.S。我知道Android 1.5已经过时了,但我仍然有很多客户在运行这些设备,所以我必须保持与它们的兼容性。

1 个答案:

答案 0 :(得分:3)

嗯,我找到了解决方案 - 非常奇怪,但它正在发挥作用。

基本上,方法尝试获取电话服务(如果它为空) - 如果它不为空则返回false(例如,对于HTC Flyer TelephonyManager不为空)方法尝试使用反射运行PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY),因为这该方法不适用于旧版本的SDK。

这是一段代码:

private Boolean hasTelephony;

public boolean hasTelephony()
{
    if(hasTelephony==null)
    {
        TelephonyManager tm=(TelephonyManager )this.getSystemService(Context.TELEPHONY_SERVICE);
        if(tm==null)
        {
            hasTelephony=new Boolean(false);
            return hasTelephony.booleanValue();
        }
        if(this.getSDKVersion() < 5)
        {
            hasTelephony=new Boolean(true);
            return hasTelephony;
        }
        PackageManager pm = this.getPackageManager();
        Method method=null;
        if(pm==null)
            return hasCamera=new Boolean(false);
        else
        {
            try
            {
                Class[] parameters=new Class[1];
                parameters[0]=String.class;
                method=pm.getClass().getMethod("hasSystemFeature", parameters);
                Object[] parm=new Object[1];
                parm[0]=new String(PackageManager.FEATURE_TELEPHONY);
                Object retValue=method.invoke(pm, parm);
                if(retValue instanceof Boolean)
                    hasTelephony=new Boolean(((Boolean )retValue).booleanValue());
                else
                    hasTelephony=new Boolean(false);
            }
            catch(Exception e)
            {
                hasTelephony=new Boolean(false);
            }
        }
    }
    return hasTelephony;
}

或多或少相同的方法可用于检查相机可用性