Android простой виджет, который запускает активность - PullRequest
3 голосов
/ 15 июня 2011

Привет, я никогда раньше не работал с виджетами, но я хочу создать очень простой виджет, я в основном хочу сделать виджет 1 на 1, который имеет только значок, просто изображение, заданное в качестве фона.ничего не текст, просто маленькая иконка, и когда иконка нажата, я хочу открыть деятельность.По сути, я хочу сделать второй значок, как в ящике приложения, в форме виджета, который открывает другое действие, а не основное.Любая помощь с благодарностью

Ответы [ 3 ]

9 голосов
/ 16 июня 2011

Мой провайдер в конечном итоге выглядел так после долгих исследований и игры

public class WidgetProvider extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            Intent intent = new Intent(context, ClassToLaunchHere.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
            views.setOnClickPendingIntent(R.id.widget, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}
0 голосов
/ 01 августа 2016

Объявите переменную

public static String YOUR_AWESOME_ACTION = "YourAwesomeAction";

, затем добавьте onUpdate и onReceive

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) {
    ComponentName thisWidget = new ComponentName(context, DigitalClock.class);

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.digital_clock);

    for (int widgetId : appWidgetManager.getAppWidgetIds(thisWidget)) {
        remoteViews.setOnClickPendingIntent(R.id.imageView, getPendingSelfIntent(context, YOUR_AWESOME_ACTION));
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    super.onReceive(context, intent);

    if (YOUR_AWESOME_ACTION.equals(intent.getAction())) {

        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.digital_clock);
        ComponentName watchWidget = new ComponentName(context, DigitalClock.class);

        appWidgetManager.updateAppWidget(watchWidget, remoteViews);

        Intent ntent = new Intent(context, MainActivity.class);
        ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(ntent);

        //Toast.makeText(context, YOUR_AWESOME_ACTION, Toast.LENGTH_SHORT).show();
    }
}

protected PendingIntent getPendingSelfIntent(Context context, String action) {
    Intent intent = new Intent(context, getClass());
    intent.setAction(action);
    return PendingIntent.getBroadcast(context, 0, intent, 0);
}

и добавьте активность в Manifest

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

надеюсь, это поможет

0 голосов
/ 15 июня 2011

Пара реализаций виджетов приложения, которые показывают самый простой способ сделать это, которые видны в https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget.

В частности, https://github.com/commonsguy/cw-advandroid/blob/master/AppWidget/PairOfDice/src/com/commonsware/android/appwidget/dice/AppWidget.java показывает, как использовать PendingIntent в качестве цели onClick для кнопки. Вы можете сделать так, чтобы ваш PendingIntent запустил действие, и вы должны быть в порядке.

...