Cómo comprobar la disponibilidad de telefonía y cámara para la versión de SDK <5
La forma estándar de verificar la disponibilidad de hardware de la cámara y la telefonía sólo funciona desde SDK> = 5:
PackageManager pm = this.getPackageManager(); boolean hasTelephony=pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); boolean hasCamera=pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
Mi problema que tengo que ejecutar define la disponibilidad de telefonía y cámara en SDK 3 (Android 1.5)
- Rechazo de la llamada entrante en android
- Cómo programaticamente responder / finalizar una llamada en Android 4.1?
- Cómo detectar cuándo se responde o se rechaza el teléfono
- Llamada entrante falsa en un dispositivo Android
- Estado de la llamada telefónica
¿Algunas ideas?
PS Entiendo que Android 1.5 es muy anticuado, pero todavía tengo un montón de clientes que ejecutan estos dispositivos, por lo que tengo que mantener la compatibilidad con ellos.
- ¿Cómo puedo agregar una opción al realizar una llamada saliente?
- Recibir SMS Intent: Obtener identificación de mensaje o de hilo
- Cómo acceder a com.android.internal.telephony.CallManager?
- Detectar si se ha contestado una llamada saliente
- Necesito encontrar la frecuencia del enlace ascendente y del downlik para el ARFCN de un dispositivo androide
- Cómo recuperar llamadas perdidas en Android SDK 2.2
- ¿Cuál es el uso de PhoneNumberUtil clase?
- Android: recibe el número de marcación de prensa de la otra parte
Bueno, he encontrado la solución – muy extraño, pero está funcionando.
Básicamente el método intenta obtener servicio de telefonía si es nulo – devuelve false, si no es nulo (por ejemplo, para HTC Flyer TelephonyManager
no es nulo) método intenta ejecutar PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
utilizando la reflexión, ya que este método no está disponible Para versiones anteriores de SDK.
Aquí hay un código:
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; }
Más o menos el mismo enfoque es viable para comprobar la disponibilidad de la cámara
- En Android, ¿cuánto tiempo tengo que responder (y qué?) Antes de ser asesinado?
- Android Bitmap.createBitmap () rellena montón