눌렀을 때 시간과 위치를 데이터베이스에 저장하는 백그라운드 작업을 트리거하는 앱 위젯을 만들려고합니다.백그라운드 작업 수행을위한 위젯 버튼 설정
내가 지금까지 수집 할 수 있었던 것부터, 내가 원하는 설정은 위젯 버튼을 나타내는 RemoteView에서 onUpdate()가 PendingIntent를 설정하는 AppWidgetProvider 하위 클래스로 구성됩니다. 그 onReceive() 메소드는 PendingIntent로부터 브로드 캐스트를 잡아낼 것이고, 백그라운드 작업을 수행하기 위해 여기에서 서비스를 시작할 것입니다.
지금까지 올바른 길을 걷고 있는데, 앱 위젯을 바탕 화면에 추가 할 때 onUpdate()가 실행되지 않아 위젯 버튼이 제대로 설정되지 않는다는 한 가지 문제점이 있습니다. 그것은 아무것도 끝내지 않는다). 위젯을 구성 활동으로 설정해야합니까? 그러면 AppWidgetProvider.onUpdate()가 트리거되거나 더 간단한 해결책이 있습니까?
내가 제대로 된 경로에 있지 않다면 달성하려는 목표를 달성하기위한 더 나은 방법에 대한 조언은 대단히 감사하겠습니다. :)
업데이트 :
생각은 여기뿐만 아니라 코드의 일부를 게시 할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dp"
android:minHeight="72dp"
android:initialLayout="@layout/quickadd_widget"
android:updatePeriodMillis="0">
</appwidget-provider>
이 QuickAddWidgetProvider입니다 : 이것은 내 리소스 파일 위젯을 정의
<receiver android:name=".widget.QuickAddWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/quickadd_widget_info" />
</receiver>
입니다 : 여기에 매니페스트에서 수신기 정의는
public class QuickAddWidgetProvider extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("QuickAdd", "onReceive()");
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.v("QuickAdd", "onUpdate()");
}
}
감사합니다 : 당신의
AppWidgetProvider
이 매니페스트의 항목이 업데이트를받을 권리<intent-filter>
이 있는지 확인합니다. 내 의도 필터에 문제가있는 것을 볼 수 없습니다. 문제의 코드로 내 질문을 업데이트했습니다. 아마도 다른 한 쌍의 눈이 오류를 발견 할 수있을 것입니다. 레코드의 경우 로그에서 onReceive()가 트리거되고 있음을 볼 수 있습니다. 그것이 updatePeriodMillis가 0으로 설정되는 것과 관련 있다고 생각했지만, 이것을 변경해도 onUpdate() 호출이 발생하지 않습니다. – rogerkk아, btw .. 인 텐트 필터가 올바르게 설정되지 않은 경우, 위젯 메뉴를 통해 위젯에 접속할 수 없을 것이라고 생각합니다. – rogerkk
@rogerkk :'onUpdate()'는 현재 구현에서'onRecieve()'의 수퍼 클래스에 연결하지 않음으로써이를 차단하므로 결코 호출되지 않습니다. 또한 AFAIK, 위젯 메뉴는 의도 필터가 아닌 메타 데이터에 의해 구동됩니다. – CommonsWare