启动活动的Android简单小部件

时间:2011-06-15 03:02:33

标签: android android-activity widget android-intent launch

嗨我之前从未使用过小部件,但我想要做的是创建一个非常简单的小部件我基本上想要制作一个只有一个图标的1对1小部件,只是将图像设置为背景否没有文字只是一个小图标,当按下图标时,我想打开一个活动。基本上我想在小部件窗体中的应用程序抽屉中创建第二个图标,打开另一个活动而不是主要活动。 非常感谢任何帮助

3 个答案:

答案 0 :(得分:9)

经过大量研究和播放后,我的提供商最终看起来像这样。

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);
        }
    }
}

答案 1 :(得分:0)

https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget处可以看到显示最简单方法的app小部件实现。

具体来说,https://github.com/commonsguy/cw-advandroid/blob/master/AppWidget/PairOfDice/src/com/commonsware/android/appwidget/dice/AppWidget.java显示了如何使用PendingIntent作为Button的onClick目标。你可以让你的PendingIntent开始一个活动,你应该好好去。

答案 2 :(得分:0)

声明变量

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>

希望这会有所帮助