2010-12-15 12 views
3

J'utilise AIDL pour répondre à un appel autimagiquement code comme suit:L'importation android.os.ServiceManager ne peut être résolu

ITelephony.Stub.asInterface(ServiceManager.getService("phone")) 
    .answerRingingCall(); 

importer des ServiceManager.class

import android.os.ServiceManager; 

mais il y a un problème : L'importation android.os.ServiceManager ne peut pas être résolue

Comment puis-je le faire fonctionner? Merci

Répondre

5

android.os.ServiceManager est une classe cachée (à savoir @hide) et les classes cachées (même si elles sont publiques au sens Java) sont retirés de android.jar, d'où vous obtenez l'erreur lorsque vous essayez d'importer ServiceManager. Les classes masquées sont celles pour lesquelles Google ne souhaite pas faire partie de l'API publique documentée.

Les applications utilisant une API non publique ne peuvent pas être compilées facilement, il y aura différentes versions de plate-forme de cette classe.

+0

Donc, je ne peux pas utiliser cette classe ServiceManager dans notre application ..? –

2

Bien que ce soit un ancien, mais personne n'a encore répondu. Toutes les classes masquées peuvent être utilisées à l'aide d'API de réflexion. Voici un exemple pour acquérir un service en utilisant Service Manager via des API de réflexion:

if(mService == null) { 
      Method method = null; 
      try { 
       method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class); 
       IBinder binder = (IBinder) method.invoke(null, "My_SERVICE_NAME"); 
       if(binder != null) { 
        mService = IMyService.Stub.asInterface(binder); 
       } 

       if(mService != null) 
        mIsAcquired = true; 

      } catch (NoSuchMethodException e) { 
       e.printStackTrace(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } catch (InvocationTargetException e) { 
       e.printStackTrace(); 
      } 

     } else { 
      Log.i(TAG, "Service is already acquired"); 
     } 
Questions connexes