2010-12-15 68 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"); 
     } 
相關問題