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