2012-11-26 8 views
1

Android 개발을 처음 사용했기 때문에 저에게 꼭 알려주십시오.Android Widget 서비스 클래스 바인딩이 호출되지 않음 제공자별로 호출되지 않음

저는 홈 화면에 배치 할 때 Configuration Activity를 여는 위젯을 만들고 있습니다. 구성이 끝나고 "완료"를 누르면 위젯 공급자 (onUpdate)는 drawable 목록을 gridview에 바인드하기 위해 위젯 서비스 클래스를 호출합니다. 그러나 서비스 클래스가 호출되지 않고 gridview가 비어 있습니다. 어떤 도움이 인정, 코드는 아래에 포함되어 있습니다 :

* 참고 : gridview 셀에있는 gridview 및 gridview 셀 (imageView 및 textView) 템플릿이있는 다른 XML이 있습니다.

매니페스트 :

<service android:name=".WidgetService" android:permission="android.permission.BIND_REMOTEVIEWS" android:exported="false" /> 

<receiver android:name=".WidgetProvider" android:label="@string/app_name"> 
    <intent-filter> 
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" android:resource="@xml/button_widget_provider" /> 
</receiver> 

공급자 :

public class WidgetProvider extends AppWidgetProvider { 

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

for (int i=0; i < appWidgetIds.length; i++){ 

    Intent intent = new Intent(context, WidgetService.class); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
    intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); 
    remoteViews.setRemoteAdapter(appWidgetIds[i], R.id.gridview, intent); 

    appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); 
}  

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 
......(omitted code)} 

서비스 :

public class WidgetService extends RemoteViewsService { 

    @Override 
    public RemoteViewsFactory onGetViewFactory(Intent intent){ 
      return new VZRemoteViewsFactory(this.getApplicationContext(), intent); 
     } 
    } 

    class VZRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory{ 

     public VZRemoteViewsFactory(Context context, Intent intent){ 
      thisContext = context; 
      appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
     } 

     public void onCreate(){ 
      // code to add drawables to list here 
     } 

     public RemoteViews getViewAt(int position){ 
      RemoteViews remoteView = new RemoteViews(thisContext.getPackageName(), R.layout.vzwidget_item); 

      // setting the image view resource this way for now just for testing 
      remoteView.setImageViewResource(R.id.launcher_icon, R.drawable.vzicon); 
      remoteView.setTextViewText(R.id.textview, "test"); 

      return remoteView; 
     } 
.....(omitted code)} 

당신을 감사합니다!

답변

0

구성 활동이 시작될 때 OnUpdate가 바로 호출되며,이 활동의 ​​결과를 게시하면 appWidgetProvider에 다음과 같은 의도 작업이 제공됩니다. - android .appwidget.action.APPWIDGET_UPDATE_OPTIONS (젤리 빈에서 테스트 됨).

이 작업을 처리하는 가장 적절한 방법은 아니지만,이 작업을 처리하는 방법입니다. 구성 활동이 결과를 게시 할 때 - 원격 뷰 서비스를 시작하고 적절한 widgetid를 사용하여보기를 시작합니다.

+0

사기에 감사드립니다. 네가 말한대로 해봤지만 안타깝게도 나에게 도움이 안된다.하지만 너는 나를 올바른 방향으로 가리켰다. 감사! – vanloren1377d

+0

이 과정을 진행하면서 결과를 설정 한 후에도 내 구성 활동이 내 OnReceive() 또는 OnUpdate() 메서드를 호출하지 않는 것으로 나타났습니다. 여기에서 작동하는이 해킹을 발견했습니다. [link] (http://stackoverflow.com/questions/3818545/how-do-i-force-an-update-in-a-configuration-activity) – vanloren1377d

+0

다행입니다! 필자는 개인적으로 WidgetProvider에서 onEnabled를 청취하는 것이 활동을 완료 한 후 올바른 방향이라고 생각합니다. onUpdate가 활동 시작 및 주기적으로 호출되는 한 알 수 있습니다. –

관련 문제