2011-01-22 4 views
0

눌렀을 때 시간과 위치를 데이터베이스에 저장하는 백그라운드 작업을 트리거하는 앱 위젯을 만들려고합니다.백그라운드 작업 수행을위한 위젯 버튼 설정

내가 지금까지 수집 할 수 있었던 것부터, 내가 원하는 설정은 위젯 버튼을 나타내는 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()"); 
    } 
} 

답변

1

난 경우 지금까지 올바른 트랙에

예!

나는의 onUpdate()는 바탕 화면에 응용 프로그램 위젯을 추가 트리거되지 않으며, 따라서 위젯 버튼이 제대로 설정되지 않습니다 것을 하나 문제를 가지고

(그것은 아무것도 doind 끝)

음, 그래야합니다. 답에 대한

<receiver android:name=".AppWidget" android:label="@string/app_name" android:icon="@drawable/icon"> 
     <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider"/> 
</receiver> 
+0

감사합니다 : 당신의 AppWidgetProvider이 매니페스트의 항목이 업데이트를받을 권리 <intent-filter>이 있는지 확인합니다. 내 의도 필터에 문제가있는 것을 볼 수 없습니다. 문제의 코드로 내 질문을 업데이트했습니다. 아마도 다른 한 쌍의 눈이 오류를 발견 할 수있을 것입니다. 레코드의 경우 로그에서 onReceive()가 트리거되고 있음을 볼 수 있습니다. 그것이 updatePeriodMillis가 0으로 설정되는 것과 관련 있다고 생각했지만, 이것을 변경해도 onUpdate() 호출이 발생하지 않습니다. – rogerkk

+0

아, btw .. 인 텐트 필터가 올바르게 설정되지 않은 경우, 위젯 메뉴를 통해 위젯에 접속할 수 없을 것이라고 생각합니다. – rogerkk

+0

@rogerkk :'onUpdate()'는 현재 구현에서'onRecieve()'의 수퍼 클래스에 연결하지 않음으로써이를 차단하므로 결코 호출되지 않습니다. 또한 AFAIK, 위젯 메뉴는 의도 필터가 아닌 메타 데이터에 의해 구동됩니다. – CommonsWare