4

Android Dev Guide에 명시된대로 위젯을 더 자주 업데이트하려면 장치를 깨우지 않는 알람을 설정하려면 AlarmManager을 사용해야합니다.AlarmManager를 사용하여 위젯을 수동으로 업데이트하십시오.

원칙적으로 AppWidgetProvider 클래스에서 제공하는 표준 메커니즘과 xml 파일에 android : updatePeriodMillis를 사용하여 손쉽게 설정하지 마십시오.

부탁드립니다. 가이드는 "AlarmManager를 사용하여 RTC 또는 을 사용하십시오."라고 표시하지만 정확히 위젯을 업데이트하려는 의도를 어떻게 보내야합니까 !!!

누구나 기본 동작을 모방 한 PendingIntent을 형성해야하는 코드를 알려주십시오. 나는 위젯 ID를 얻는 방법을 알지 못한다. 어떤 행동을해야하는지 등등 ... 슬픈 dev 가이드는 그 시점에서 설명을 그만 둔다! 조치가 필요한 추가 품목으로는 무엇이 필요합니까?

누가 왜 30 분보다 자주 업데이트하고 싶어하는지 관심이 있습니다. 내 위젯은 다음 버스가 역에서 출발 할 때를 보여줍니다. 20 분마다 버스가 있습니다. 그래서 두 가지 옵션이 있습니다 : 매분마다 위젯을 업데이트하고, 다음 버스의 출발 시간을 표시하십시오. (그게 내가 원하는거야 !!) 그렇지 않으면 다음 버스의 출발 시간을 알려주십시오. 그래서 적어도 20 분마다 업데이트해야합니다!

지금 : 장치가 잠 들어있을 때, 물론 이것은 절대로 깨어나서는 안됩니다. 따라서 dev 가이드의이 절을 이해하면 올바르게 구현할 수 있습니다. 아무도 내가 틀렸다고 생각하니? 아, 또 다른 한가지 : 기기가 잠자기 상태 일 때 잠자기 기기로 인해 위젯을 업데이트해야하고 내 알람이 울리지 않을 때 잠자기 상태가되면 즉시 업데이트됩니까 ???

도움 주셔서 감사합니다.

추신 : 왜 위젯 공급자의 xml 정의가 불리언 스위치로 "장치를 깨우지 마십시오"라고 간단하게 말할 수 없는지 궁금합니다. 그렇게되면 처음부터 삶이 훨씬 쉬워집니다! 아무리 장치를 깨우려면 어떤 종류의 위젯이 필요합니까 ??? ;-)

이것은 내가 지금까지왔다,하지만이 작동하지 않습니다 얼마나 멀리이다 - 아무 일도 발생하지 :

private void startAlarm(Context pContext) { 
    Log.d(TAG, "startAlarm"); 
    AlarmManager am = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE); 

    Intent intent = new Intent("android.appwidget.action.APPWIDGET_UPDATE"); 
    intent.setClass(pContext, getClass()); 
    PendingIntent pi = PendingIntent.getBroadcast(pContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, pi); 
} 

답변

1

누구 나는 PendingIntent를 형성하는 데 필요한 코드를 명시하시기 바랍니다 수 본뜬 기본 동작?

AFAIK는 "기본 동작을 정확하게 모방 할"수 없으므로 그렇지 않습니다. AlarmManager 알람을 사용하려면 PendingIntent을 사용하면 onReceive()에서 처리하는 AppWidgetProvider에 맞춤 작업을 보내거나 앱 위젯의 실제 지능을 위해 IntentService에서 startService()을 호출 할 수 있습니다.

내가 어떻게 당신은 응용 프로그램 위젯이 처음 화면에 넣을 때와 실제 onUpdate() 통화에서 위젯 ID를 저장 위젯 IDS

을 얻을 수있는 단서가 없습니다. 알람이 울리면 모든 앱 위젯을 업데이트하십시오.

갱신 다음 버스의 출발 시간을 표시하는 위젯 모든 분 (즉 내가 원하는거야!)

이 사용자가 구성 할 수 있도록하십시오.

아, 내가 알아 싶습니다 또 다른 한가지 : 장치가 위젯이 갱신 될 때에 잠 내 알람이 잠자는 장치로 인해 발행되지 않은 경우는이가 깨어 나면 즉시 업데이트됩니다? ??

AFAIK 예, 그렇지만 나는 _WAKEUP 가지가 아닌 알람을 사용하지 않았습니다.

+0

큰 문제가 정말 현재의 위젯 ID를 "기억"하는 지점에 도착하지 않는 것이 :

다음은 알람 관리기에 관한 것입니다. onUpdate가 얻는 id 배열은 항상 FULL리스트가되는 것은 아닙니다. 새 widget을 추가 할 때 구성 대화 상자가 "OK"단추 또는 sth와 같이 올바르게 끝나기 전에이 새 ID로 호출됩니다. 왜??? 게다가, 위젯이 쫓겨나는 유일한 방법은'onDelete'입니다 -하지만 지금은 작동하지 않습니다. 공급자는 이미 알려진 위젯 ID를 저장하기 위해 환경 설정을 사용해야합니까? – Zordid

+1

@ Zordid :'AppWidgetManager'에서'getAppWidgetIds()'를 호출하십시오. ID가 어떤 구성과 함께 사용되는지 알지 못한다면 많은 도움이되지 않습니다. 개인적으로 나는 여러 인스턴스가 의미가있는 앱 위젯을 작성하지 않았으므로 동일한 콘텐츠로 모든 인스턴스를 업데이트하기로 결정했습니다. – CommonsWare

+0

아! 'getAppWidgetIds()'!! 멋지다, 어떤 예도 이제까지 그것을 보여줬다! 어떻게 알았어 ?? :-) – Zordid

관련 문제