Как перенести виджет из targetSdkVersion с 25 на 26? - PullRequest
0 голосов
/ 06 декабря 2018

После того как я обновил targetSdkVersion до 26 виджетов в моем приложении перестало отвечать на события кликов.Я не нашел никакого решения в сети.кажется, что только если мы вызовем PendingIntent.getActivity (...), это сработает и откроет приложение, но в моем приложении мне нужно выполнить некоторые фоновые действия после нажатия виджета.

Я читал о Пределы выполнения фона .Но не понял, как заставить это работать ... так вот мой код ниже

Манифест:

   <receiver android:name="com.test.widget.WidgetClock" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="enter" />

            <category android:name="enterAction" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_clock_provider" />
    </receiver>

AppWidgetProvider, расширяющий AppWidgetProvider:

public class WidgetClock extends AppWidgetProvider{

    public  RemoteViews views;
    public Context context;


    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        this.context = context;


        for (int i = 0; i < appWidgetIds.length; i++) {
            //start action method:
            views = new RemoteViews(context.getPackageName(), R.layout.widget_small_clock);
            Intent intent = new Intent("enterAction").addCategory("enterAction");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            views.setOnClickPendingIntent(R.id.bEnter_Widget_small, pendingIntent);
            appWidgetManager.updateAppWidget(appWidgetIds[i], views);
        }

    }

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if ("enterAction".equals(action)) {
                //To something...
                update(context);
        } else {
            super.onReceive(context, intent);
        }
    }


    public void update(Context context){
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        ComponentName thisAppWidget = new ComponentName(context.getPackageName(), WidgetSmallClock.class.getName());
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
        onUpdate(context, appWidgetManager, appWidgetIds);
    }
}

И вот как я обновляю виджет программно через MainActivity ..

public static void updateWidget(Context context){
    Intent intent = new Intent(context,WidgetClock.class);
        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        int ids[] = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, WidgetClock.class));
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
        context.sendBroadcast(intent);
}

Как я могу перенести свой существующий код и заставить это действие работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...