2011-10-04 3 views
0

내 응용 프로그램은 활동 외에도 서비스 및 응용 프로그램 위젯을 가지고 있습니다.Android - 응용 프로그램이 다시 시작될 때 응용 프로그램 위젯이 대기중인 인 텐트를 사용할 수 없음

위젯을 클릭하면 코드가 실행되고 응용 프로그램의 서비스를 활성화/비활성화 할 수 있습니다.

Intent intent = new Intent(ACTION_ENABLE_DISABLE); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

가 (. ACTION_ENABLE_DISABLE은 물론, 나에 의해 정의된다)

그리고 매니페스트

, 나는이 작업을 지정 : 그래서, 응용 프로그램 위젯을 클릭하면 구축,이 방법을 보류 의도를 실행 인 텐트 필터.

그런 다음 onReceive 메서드를 재정의하고 의도가 ACTION_ENABLE_DISABLE 인 경우 해당 서비스를 사용하거나 사용하지 않도록 설정하는 코드를 실행합니다. 그렇지 않으면 super.onReceive를 호출하므로 일반 앱 위젯 브로드 캐스트가 완료됩니다.

지금까지 너무 좋아! 위젯이 잘 작동합니다.

하지만 내 앱의 PID가 X 일 때 만들었다 고 가정 해 보겠습니다. 그런 다음 사용자가 내 활동을 중단하고 파괴되었습니다. 그래서 서비스로서 - 사용자가 그것을 닫았다고 말할 수 있습니다. 내 프로세스는 아무 활동이나 서비스도 호스팅하지 않습니다.이 서비스는 파괴되었거나 작업 관리자에서 종료되었습니다. 두 경우 모두 관련이 있습니다. 다음 번에 생성 될 때 다른 PID를 가지며 이제는 앱 위젯을 클릭하면 아무 것도 안됩니다.

앱 위젯은 수동으로 (예 : 활동에서) 업데이트 할 수 있습니다. 그러나 클릭하면 다음으로 이어지지 않습니다.

  1. ACTION_ENABLE_DISABLE 방송이 전송됩니다. OR
  2. 내 브로드 캐스트를 수신하는 앱 위젯입니다.

위의 중 하나가 발생합니다. logcat을 살펴볼 때 위젯의 'onReceive'메소드에서 Log.d로 로그 한 메시지가 나타나지 않습니다.

왜 그럴까요? 브로드 캐스트를 보낼 때 특별히 지정해야하거나 매니페스트의 수신자 선언에 무엇인가 지정해야합니까?

그리고 어떤 점에서, 앱 위젯의보기가 클릭 (내 방식이 아니라) 될 때 자신의 코드를 실행하는 데 사용할 수있는 것이 더 있습니다.

대단히 감사합니다!

답변

0

요즘 같은 문제가 발생했습니다. 몇 가지 기기에서 내 앱을 테스트했는데 일부 기기에는이 문제가 있고 일부는 그렇지 못했습니다. 그런 다음 작업 관리자에서 위젯의 프로세스 (첫 번째, X)를 죽이면 다음에 위젯을 만들고 정상적으로 작동하는 것으로 나타났습니다. 그래서 여기 내 해결책이 있습니다. onDisable() 함수에 다음 코드를 추가하십시오.

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 

위젯을 삭제하면이 자체가 삭제됩니다. 따라서 다음에 만들면 정상적으로 작동합니다.

+0

나는 오래 전에 문제를 고쳤으며 (** 서비스를 삭제하고 다른 **'BroadcastReceiver'를 만들어 방송을 받았다. 문제를 해결했다.위젯을 삭제/비활성화하고 다시 추가하면 작동한다는 것을 알고 있습니다. 하지만 그건 내 문제가 아니 었어 : (위젯이 전혀 작동하지 않는다. – Jong

관련 문제