2012-07-28 18 views
5

To jest mylące. Patrzę na klasę Android 2.2.2_r1 source code for the NotificationManager i widzę metodę getService(), która jest zdefiniowana jako public i static. Jednak zaćmienie mówi mi:Nie można użyć publicznej metody statycznej?

metoda getService() jest zdefiniowana dla typu NotificationManager na linii

Object o = NotificationManager.getService(); 

Mój projekt jest budynek z Android 2.2/poziom API 8. I próbowałem użyć refleksji, aby zobaczyć nazwy metody i modyfikatory, a na pewno wystarczy, wróciłem

public static getService

Czy tu czegoś brakuje? Dlaczego Eclipse powiedział mi, że ta metoda nie istnieje?

Odpowiedz

5

Znajdziesz bardzo szczegółową odpowiedź w this post.

W skrócie: Ponieważ kompilacji przeciwko android.jar, który ma wszystkie ukryte metody (takie jak ten, do którego próbujesz uzyskać dostęp) usunięte. Będą one dostępne tylko w środowisku uruchomieniowym, na potrzeby wewnętrznego androida.


Ale może i Ty tego potrzebujesz. Właściwy sposób na dostęp do NotificationManager jest metodą z kontekstu getSystemService:

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

Z context jest ważny kontekst (np bieżącej działalności).

+0

To zabawne, czytałem ten post, wróciłem i stwierdziłem, że wysłałeś to jako odpowiedź. Naprawdę próbuję znaleźć hack, który pozwoliłby mi uzyskać listę powiadomień, więc normalny sposób uzyskania menedżera powiadomień nie jest tym, czego potrzebuję. – you786

+0

Przepraszamy. Nie rozumiem dokładnie, dlaczego normalny sposób nie działa dla ciebie? 'NotificationManager' zwrócony tą metodą jest taki sam, jak ten zwrócony przez' getService'. –

+0

@ you786 - spontanicznie powiedziałbym, że nie możesz znaleźć listy w ten sposób - przynajmniej nie przez API 'INotificationManager', które jest używane przez' NotificationManager' do komunikacji z 'NotificationManagerService'. – Jens

Powiązane problemy