내 응용 프로그램은 활동 외에도 서비스 및 응용 프로그램 위젯을 가지고 있습니다.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를 가지며 이제는 앱 위젯을 클릭하면 아무 것도 안됩니다.
앱 위젯은 수동으로 (예 : 활동에서) 업데이트 할 수 있습니다. 그러나 클릭하면 다음으로 이어지지 않습니다.
- ACTION_ENABLE_DISABLE 방송이 전송됩니다. OR
- 내 브로드 캐스트를 수신하는 앱 위젯입니다.
위의 중 하나가 발생합니다. logcat을 살펴볼 때 위젯의 'onReceive'메소드에서 Log.d로 로그 한 메시지가 나타나지 않습니다.
왜 그럴까요? 브로드 캐스트를 보낼 때 특별히 지정해야하거나 매니페스트의 수신자 선언에 무엇인가 지정해야합니까?
그리고 어떤 점에서, 앱 위젯의보기가 클릭 (내 방식이 아니라) 될 때 자신의 코드를 실행하는 데 사용할 수있는 것이 더 있습니다.
대단히 감사합니다!
나는 오래 전에 문제를 고쳤으며 (** 서비스를 삭제하고 다른 **'BroadcastReceiver'를 만들어 방송을 받았다. 문제를 해결했다.위젯을 삭제/비활성화하고 다시 추가하면 작동한다는 것을 알고 있습니다. 하지만 그건 내 문제가 아니 었어 : (위젯이 전혀 작동하지 않는다. – Jong