2013-06-28 2 views
0

내가 활동이 표시되지 그리고 나는 그것이 잘 작동 통지를 클릭하면안드로이드 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에서 알림의 클릭시 상태 표시 줄이 접히지 않습니다. 알림 클릭시 상태 표시 줄을 숨기려면 어떻게해야합니까? 4.0.4를 실행하는 S3을 사용하고 있습니다.

+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에 대한 응답으로 활동이 시작된 경우에만 수행하십시오.

알림 버튼이 활동을 시작하는 대신 브로드 캐스트 인 텐트를 사용하는 경우 젤리에서 패널을 닫을 수있는 유일한 방법입니다.

+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

관련 문제