2013-07-31 2 views
0

위젯의 콘텐츠를 관리하는 서비스를 확장하는 클래스와 스위치가있는 위젯이있는 앱이 있습니다. RemoteViews를 사용하여보기에 액세스하여 편집하지만 스위치의 상태에 종속적 인 일을하고 싶습니다. 스위치 상태를 얻을 수있는 방법이 있습니까? 나는 API를 통해 살펴 봤는데 할 수있는 방법을 찾지 못했습니다.android widget에서 상태를 전환하십시오.

선제 : 나는 그것하지 활동

필요한 경우 내가 코드를 게시 할 수 있기 때문에 findViewById를 사용할 수 없습니다. 명확성을 위해

내가 사용하려는 스위치의 유형은 당신이 App Widgets Guide를 따르고 있습니다이 http://1.bp.blogspot.com/-AXi56wp5zVE/T6pAZj-MXdI/AAAAAAAAACM/-wT0w1PpcJ4/s1600/device-2012-05-09-152937.png

답변

1

같은 하나? Switch 위젯이 RemoteViews에서 지원되지 않는다고 생각합니다.

어쨌든 정보가 필요하지 않으므로 setOnClickPendingIntent()을 사용해야하고 앱 위젯을 업데이트 할 의도가있는 클릭을 보내야합니다. 버튼이 어떤 상태에 있는지 (또는 어떤 상태가 클릭되었을 때 변경 될 것인지)를 지정하는 추가 기능을 인 텐트에 고정하십시오. 업데이트 로직에서 추가 정보를 읽고 UI를 변경하고 추가로 변경된 새 PendingIntent를 설정하십시오. 매니페스트에서

public class MyAppWidgetProvider extends AppWidgetProvider { 
    public static final String ACTION_UPDATE_SWITCH = "MyAppWidgetProvider.UPDATE_SWITCH"; 
    public static final String EXTRA_SWITCH_ON = "MyAppWidgetProvider.EXTRA_SWITCH_ON"; 

    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 
     if (ACTION_UPDATE_SWITCH.equals(action)) { 
      int id = intent.getIntExtra(AppWidgetManager.EXTRA_APPWDIGET_ID, 0); 
      if (id != 0) { 
       updateAppWidgetSwitch(context, intent, id); 
      } 
     } 
     super.onReceive(context, intent); 
    } 

    private void updateAppWidgetSwitch(Context context, Intent intent, int appWidgetId) { 
     boolean switchOn = intent.getBooleanExtra(EXTRA_SWITCH_ON, false); 
     // take some action based on the switch being clicked 

     RemoteViews views = new RemoteViews (context.getPackageName(), R.layout.app_widget_layout); 
     // normal RemoteViews stuff 
     // use switchOn var to set your switch state 

     // make new on click pending intent 
     Intent intent = new Intent(ACTION_UPDATE_SWITCH); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWDIGET_ID, id); 
     intent.putExtra(EXTRA_SWITCH_ON, !switchOn); // new state 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setOnClickPendingIntent(R.id.switch_id, pendingIntent); 

     // update widget 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 

    // other AppWidgetProvider methods ... 
} 

은, 당신의 AppWidgetProvider의 <receiver> 요소에이 텐트 필터를 추가합니다. 위의 액션 문자열의 값을 변경하는 경우 여기서도 변경해야합니다.

<intent-filter> 
    <action android:name="MyAppWidgetProvider.EXTRA_SWITCH_ON" /> 
</intent-filter> 
+0

잘 모르겠습니다. 연락 할 수없는 다른 사람이 작성한 코드에 추가하고 있습니다. 나는 가이드를 볼 것이다. 그리고 그것이 도움이되는지 당신에게 알린다. 코드가 좋을 것입니다. 감사합니다. – Cob50nm

관련 문제