【问题标题】:How to launch an activity after clicking a widget?单击小部件后如何启动活动?
【发布时间】:2015-10-16 06:17:45
【问题描述】:

我想创建一个带有图标的简单小部件来启动我的应用程序。

我的小部件及其布局正常工作,但我找不到让它在单击它时启动应用程序的方法。

这是小部件类:

public class LauncherWidget extends AppWidgetProvider {

    private static final String ACTION_CLICK = "ACTION_CLICK";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager) {

        Intent intent = new Intent(context, SplashActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        // Attach the intent to the widget's button.
        final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        remoteViews.setOnClickPendingIntent(R.id.widget, pendingIntent);

    }

}

我从未创建过小部件,所以我不知道在这里做什么。 我已经在这里查看了更多信息,但我能找到的只是点击时更新其内容的小部件,但我尝试使用他们的代码但它不起作用。

提前致谢。

【问题讨论】:

    标签: android view widget android-widget android-appwidget


    【解决方案1】:

    这对我有用...

    onUpdate 方法代码应该是:

    @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            for (int i = 0; i < appWidgetIds.length; i++) {
                int appWidgetId = appWidgetIds[i];
    
                try {
                    Intent intent = new Intent("android.intent.action.MAIN");
                    intent.addCategory("android.intent.category.LAUNCHER");
    
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    intent.setComponent(new ComponentName(context.getPackageName(),
                            "Activity.class"));
                    PendingIntent pendingIntent = PendingIntent.getActivity(
                            context, 0, intent, 0);
                    RemoteViews views = new RemoteViews(context.getPackageName(),
                            R.layout.widget_layout);
                    views.setOnClickPendingIntent(R.id.widget, pendingIntent);
                    appWidgetManager.updateAppWidget(appWidgetId, views);
                } catch (ActivityNotFoundException e) {
                    Toast.makeText(context.getApplicationContext(),
                            "There was a problem loading the application: ",
                            Toast.LENGTH_SHORT).show();
                }
    
            }
        }
    

    【讨论】:

    • 我尝试了这段代码,它正在部分工作。我能够在小部件上注册点击事件,但无法启动该活动。我使用您的代码进行了一些小的修改以适合我的类名等。
    【解决方案2】:

    在您的小部件 AppWidgetProvider 类的 onUpdate() 方法中使用这个 sn-p:

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
        Intent configIntent = new Intent(context, Activity.class);
    
        PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    
        remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent);
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    } 
    

    【讨论】:

    • 我试过这个,但它没有启动我想要的活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多