为什么我不能直接找到对StatusBarManager类的引用?

时间:2012-07-04 06:37:26

标签: android statusbar

要在Android中动态拖动通知区域,唯一的解决方案就是

    Object sbservice = getSystemService( "statusbar" );
    Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
    Method showsb = statusbarManager.getMethod( "expand" );
    showsb.invoke( sbservice );

这非常有效,但为什么反射的肮脏呢?为什么我不能直接找到对StatusBarManager类的引用?为什么“状态栏”服务的Context类中没有常量?

2 个答案:

答案 0 :(得分:14)

  

为什么反思的肮脏?

因为它不是Android SDK的一部分。只有对创建不可靠应用程序感兴趣的人才会尝试与Android源代码本身之外的StatusBarManager进行交互,因为欢迎核心Android团队和设备制造商随时更改SDK之外的任何内容。

  

为什么我不能直接找到对StatusBarManager类的引用?

因为它不是Android SDK的一部分。由于种种原因,Android框架类中有许多类和方法都标有@hide注释:不愿承诺无限期地支持API,“默默无闻”等等。

  

为什么“状态栏”服务的Context类中没有常量?

因为它不是Android SDK的一部分。我们当然欢迎您向AOSP提供补丁,以便StatusBarManager被“提升”到与其他系统服务相同的状态(例如LocationManagerNotificationManager)。如果{~1}}情况仅仅是在〜2007年创建SDK之后的疏忽,那么您的补丁可能会被接受,您会在即将推出的Android版本中看到更改。

答案 1 :(得分:0)

对于那些希望直接在其系统应用程序中使用此API的人(如我),有一种无需反射即可获得访问权限的方法。

将此添加到您应用的[.5, .8, .9, .99, .999, .999]

Android.mk