Android小部件的onClick

3

我希望能够点击小部件并启动对话框。我已经阅读了官方文档和一些非官方的资料。最初我想启动一个新的活动,但即使如此也失败了。我在Logcat中看到了以下内容,但实际上我什么都看不到。

11-14 21:28:47.929: INFO/ActivityManager(116): Starting: Intent { flg=0x10000000 cmp=com.android.app/.Execute bnds=[179,89][300,160] } from pid -1

我猜以上内容的意思是:意图已经传递了...但实际上活动并没有启动。应该启动的活动是普通活动吗?
使用的代码如下:
public class ExampleAppWidgetProvider extends AppWidgetProvider {

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int i=0; i<N; i++) {
        int appWidgetId = appWidgetIds[i];

        // Create an Intent to launch ExampleActivity
        Intent intent = new Intent(context, ExampleActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

        // Get the layout for the App Widget and attach an on-click listener
        // to the button
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
        views.setOnClickPendingIntent(R.id.button, pendingIntent);

        // Tell the AppWidgetManager to perform an update on the current app widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}
}

有什么想法吗?

你有什么进展吗?我也在观察这个问题。当我尝试从我的一个应用程序启动带有通知的活动时,我也遇到了这个问题。我猜这与进程ID显示为-1有关。通常情况下,当通过意图启动其他活动时,进程ID不是-1,而是由操作系统分配的其他数字。 - Kiran Parmar
我的问题已经解决了。PID为-1与此无关。我的实际问题是代码中有一个拼写错误。我本应该输入“XYZActivity”,但我写成了“XYZACtivity”(注意大写字母C),由于它被指定为字符串,因此Android没有抛出任何错误。也许在你的情况下也有类似的问题? - Kiran Parmar
那么,关于-1是什么意思?你是指你想要启动的活动拼写错误了吗?我没有看到任何拼写错误。小部件点击后如何启动活动处理意图?或者这与此无关? - JustCurious
第一个问题-不知道...我认为它被分配给通知栏的进程...因为它始终为通过通知栏启动的任何内容打印-1。 第二个问题-是的,我拼错了名字。我使用setClassName()方法给出了名称,因为它是String,所以没有编译时错误。至于小部件部分的其他问题,很抱歉,我对此一无所知.. :( 或许某位有知识的人能够帮助您 :) - Kiran Parmar
1个回答

2
可能导致问题的最常见原因是您在清单文件中未声明ExampleActivity
<更新>
您还可以尝试使用独特的数字作为PendingIntent创建的参数2,并在参数4中加入合理的标志。
    PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT );

我也尝试过了,但没有任何变化。有可能要执行的活动没有按照预期编码吗?我的意思是,是否需要在新启动的活动中包含一些特殊内容? - JustCurious
好的,你需要处理添加到PendingIntentIntent。你在清单文件中正确定义了ExampleActivity,对吧? - Mark Allison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接