2012-07-28 10 views
5

Esto es confuso. Estoy en la clase Android 2.2.2_r1 source code for the NotificationManager, y veo el método getService() que se define como public y static. Sin embargo, eclipse me está diciendo:¿No se puede usar un método público estático?

El método getService() está definido para el tipo NotificationManager en la línea

Object o = NotificationManager.getService(); 

Mi proyecto es la construcción contra el androide 2.2/API Nivel 8. Yo intentado utilizar la reflexión para ver los nombres de los métodos y modificadores, y bastante seguro, regresé

public static getService

¿Me falta algo aquí? ¿Por qué el eclipse me dice que este método no existe?

Respuesta

5

Encontrará una respuesta muy detallada en this post.

En resumen: Porque compila contra el android.jar, que tiene todos los métodos ocultos (como el que está intentando acceder) eliminados. Solo estarán allí en tiempo de ejecución, para uso interno de Android.


Pero como quizás también lo necesite. La forma correcta para acceder al NotificationManager es a través del método de un contexto getSystemService:

NotificationManager nm = (NotificationManager)ctx.getSystemService(Context.NOTIFICATION_SERVICE); 

Con context ser un contexto válido (como su actividad actual).

+0

Es gracioso, estaba leyendo esa publicación, volví y descubrí que la había publicado como respuesta. De hecho, estoy tratando de encontrar un truco que me permita obtener una lista de notificaciones, por lo que la forma normal de obtener el administrador de notificaciones no es lo que necesito. – you786

+0

Lo siento. No entiendo exactamente por qué la forma normal no funciona para usted? El 'NotificationManager' devuelto por este método es el mismo que el devuelto por' getService'. –

+0

@ you786 - espontáneamente diría que no puede encontrar una lista de esa manera, al menos no a través de la API 'INotificationManager' que es lo que el' NotificationManager' usa internamente para hablar con 'NotificationManagerService'. – Jens

Cuestiones relacionadas