重启后,AppWidgets会转换为Google日历和时钟小部件

时间:2018-06-15 09:28:30

标签: android android-intent android-widget android-broadcast android-appwidget

我不知道为什么会这样。我正在制作小工具,显示用户选择的货币的最佳货币汇率。我注意到重启后,他们有时会变成一个时钟和一个日历小部件。这是我的代码。我认为它可能是我的Intents或OnReceive(),但我不确定是什么。

public class LightRowWidget extends RowWidget {
List<CurrencyObject> currencyObjects = new ArrayList<>();

public LightRowWidget() {
    super(R.layout.widget_row_layout, R.color.white, Constants.FULL_OPACITY, R.color.black);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    if (appWidgetIds != null && appWidgetIds.length > 0) {
        for (int appWidgetId : appWidgetIds) {
            // Create currencyObjects. They're used to assign the correct value
            // to the correct texView
            CurrencyObject currObj1 = new CurrencyObject(
                    R.id.currency1, R.id.currency1_buy, R.id.currency1_sell);
            currencyObjects.add(currObj1);
            CurrencyObject currObj2 = new CurrencyObject(R.id.currency2, R.id.currency2_buy, R.id.currency2_sell);
            currencyObjects.add(currObj2);

            // Register an onClickListener to Update the current widget on a click
            Intent clickIntent = new Intent(context, LightRowWidget.class);
            clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
            clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

            onUpdate(context, appWidgetManager, appWidgetId, currencyObjects, clickIntent);
        }
        //start an intent that will schedule the alarm for the next update

        Intent startIntent = new Intent(context, LightRowWidget.class);
        scheduleNextUpdate(context, startIntent, appWidgetIds);
    }

这是我的RowWidget类及相关代码。

public abstract class RowWidget extends AppWidgetProvider implements WidgetInterface{

public RowWidget(int layout, int background_color, int background_opacity, int text_color){
    super();
    this.layout = layout;
    this.background_color=background_color;
    this.background_opacity=background_opacity;
    this.text_color=text_color;

}



public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetId, List<CurrencyObject> currencyObjects, Intent clickIntent) {
    theAppWidgetManager = appWidgetManager;

    //Get the current name of class
    String currentClass = this.getClass().getName();
    switch(currentClass){
        case("foobar"):
            configure_class=Constants.FOUR_ROW_CONFIGURE;
            break;

        case("foo"):
            configure_class=Constants.ROW_APP_WIDGET_LIGHT_CONFIGURE;
            break;

        case("bar"):
            configure_class=Constants.ROW_APP_WIDGET_DARK_CONFIGURE;
            break;
        case("barfoo"):
            configure_class=Constants.TWO_ROW_CONFIGURE;
            break;

    }
    // There may be multiple widgets active, so update all of them
    // Get the preferred Currencies
    Set<String> preferredCurrencies = AppWidgetConfigure.loadCurrencyPref(context,appWidgetId, configure_class);

    // Inflate the layout
    RemoteViews view = new RemoteViews(context.getPackageName(), layout);

    // if the preferred Currencies have been declared already
    if(preferredCurrencies!= null){
        // Set the currencies for each object
        for(String currency: preferredCurrencies){
            if(currencyCount<currencyObjects.size()){
                currencyObjects.get(currencyCount).setCurrencyType(currency);
                currencyCount+=1;
            }
        }
    }
    else{
        for(CurrencyObject curObj:currencyObjects){
            curObj.setCurrencyType("RUB");
        }
    }
    // Open up the Currency fragment on the click of the widget
    Intent configIntent = new Intent(context, MainActivity.class);
    configIntent.putExtra("LaunchCurrency", true);
    configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    view.setOnClickPendingIntent(R.id.row_widget_layout, configPendingIntent);

    // Update the widget whenever refresh button clicked
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
            0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    view.setOnClickPendingIntent(R.id.refresh, pendingIntent);


    makeRequest(context, theDate, view, currencyObjects, appWidgetId);
    currencyCount = 0;

}
//Handle receiving the intent
@Override
public void onReceive(Context context, Intent intent){
    if (intent.getAction().equals(ACTION_APPWIDGET_UPDATE)) {
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        // Get id's
        int[] allWidgetIds = intent
                .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
        onUpdate(context, manager, allWidgetIds);
    }
    else{
        super.onReceive(context, intent);
    }


}

编辑:窗口小部件转换为我屏幕上已有的许多不同窗口小部件。

0 个答案:

没有答案