2010-12-15 40 views
3

我使用AIDL,自动将应答呼梯,代码如下:进口android.os.ServiceManager不能得到解决

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

我导入ServiceManager.class

import android.os.ServiceManager; 

,但有一个问题:导入android.os.ServiceManager无法解析

我该如何使它工作?由于

回答

5

android.os.ServiceManager是一个隐藏的类(即@hide)和隐藏的类(即使它们是Java中的公众)从的android.jar被删除,因此,当您尝试导入ServiceManager你的错误。隐藏的类是那些Google不希望成为已记录的公共API的一部分的类。

使用非公共API的应用程序无法轻松编译,这个类将有不同的平台版本。

+0

因此,我无法在我们的应用程序中使用此ServiceManager类。 – 2017-04-03 06:08:50

2

虽然是旧的,但还没有人回答。任何隐藏的类都可以使用反射API使用。以下是通过反射API使用Service Manager获取服务的示例:

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"); 
     } 
相关问题