2013-06-28 34 views
0

我使用的Android ICS状态栏不隐藏在通知

final Intent intent = new Intent(context, TestActivity.class); 
     intent.setAction(Intent.ACTION_VIEW); 
PendingIntent launcher = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setOnClickPendingIntent(R.id.test_launch_btn, launcher); 

如果活动是不可见的,我就通知点击它工作正常开展,从通知活动的点击。问题是,在ICS如果活动已经可见,我点击通知状态栏不会通知点击上滑,而在Jellybean状态栏上点击。 状态栏在ICS中的点击通知中没有崩溃。 点击通知后可以隐藏状态栏。我使用S3运行4.0.4。

+0

在ICS的情况下,我认为它不是调用StatusBarManager类的崩溃方法。任何人都知道什么时候被框架调用。 – anujprashar

+0

在日志中我看到该系统尝试启动活动06-28 13:21:49.522:I/ActivityManager(533):START {act = android.intent.action.VIEW flg = 0x10000000 cmp = com.example.test /。 TestActivity bnds = [0,432] [172,604]} from pid -1。但它没有启动。 – anujprashar

回答

4

你是对的,当点击一个按钮启动活动时,Honeycomb和ICS不会自动关闭通知面板。 (当时我们没有办法告诉您哪个通知的按钮将启动一个活动,也不能通过适当的方式拦截该点击。如果关闭任何点击的面板都没有意义,因为它会让音乐控制器真的很不愉快。)

以下是您可以做的事情:在HC + ICS上,一旦您的活动以这种方式启动,您可以播放Intent.ACTION_CLOSE_SYSTEM_DIALOGS以明确关闭通知面板。只能在Jelly Bean前设备上执行此操作,并且只有在您的活动已根据您自己的通知的PendingIntent启动时才执行此操作。

请注意,如果您的通知按钮使用广播意图而不是启动活动,这仍然是关闭Jelly Bean面板的唯一方法。

+0

感谢您的回复。我通过ICS设备的反射调用方法来关闭状态栏。 \t \t \t \t Object service = getSystemService(“statusbar”); \t \t \t \t类 statusbarManager = Class.forName(“android.app.StatusBarManager”); \t \t \t \t方法collapse = statusbarManager.getMethod(“collapse”); \t collapse.setAccessible(true); \t collapse.invoke(service); – anujprashar

+0

只需使用广播;您不需要依靠反思未经CTS检查的方法,因此无法保证在所有Android设备上均可用。 – dsandler