2010-12-15 81 views
3

を解決することはできません、インポート、次のようにコード:android.os.ServiceManagerは私が自動的にコールに応答するAIDLを使用してい

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

私はServiceManager.class

import android.os.ServiceManager; 

をインポートするが、問題があります:インポートandroid.os.ServiceManagerを解決できません

どうすればいいですか?おかげ

答えて

5

android.os.ServiceManagerは、隠されたクラス(すなわち、@hide)で、隠されたクラスは、(彼らは、Javaの意味で公開されていても)あなたがServiceManagerをインポートする際にエラーが発生したため、android.jarから削除されます。非表示のクラスは、Googleが文書化された公開APIの一部になりたくないクラスです。

非公開APIを使用するアプリケーションは簡単にコンパイルできません。このクラスのプラットフォームのバージョンは異なります。

+0

私はこのServiceManagerクラスをアプリケーションで使用することはできません。 –

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"); 
     } 
関連する問題