如何检查 SDK 版本的电话和摄像头可用性 <5 [英] How to check telephony and camera availability for SDK version < 5
问题描述
检查相机和电话硬件可用性的标准方法仅在 SDK >= 5 后才有效:
Standard way of checking camera and telephony hardware availability works only since 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) 中运行时定义电话和摄像头的可用性的问题
My problem that I need to runtime define availability of telephony and camera in SDK 3 (Android 1.5)
有什么想法吗?
P.S.我知道 Android 1.5 已经过时了,但我仍然有很多客户在使用这些设备,所以我必须保持与它们的兼容性.
P.S. I understand that Android 1.5 is very outdated, but still I do have bunch of customers running these devices, so I have to keep compatibility with them.
推荐答案
好吧,我找到了解决方案 - 非常奇怪,但它正在工作.
Well, I have found solution - very odd but it's working.
如果它为 null,则基本上方法会尝试获取电话服务 - 如果它不为 null(例如,对于 HTC Flyer TelephonyManager
不为 null),则返回 false 方法尝试运行 PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
使用反射,因为此方法不适用于旧版本的 SDK.
Basically method tries to get telephony service if it's null - it returns false, if it's not null (e.g. for HTC Flyer TelephonyManager
is not null) method tries to run PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
using reflection, since this method is not available for old versions of 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;
}
或多或少相同的方法可用于检查相机可用性
More or less the same approach is workable for checking of camera availability
这篇关于如何检查 SDK 版本的电话和摄像头可用性 <5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!