Android 如何从 App Widget 启动服务
How to start a service from App Widget in Android
我正在为我的 Android 应用程序制作主屏幕应用程序小部件。在那个 App Widget 中有一个 ListView。该 ListView 有一个自定义布局,其中有一个 TextView 和一个 ImageButton。我正在该 ImageButton 上设置一个 PendingIntent 以启动服务,如下所示:
Intent intent = new Intent(mContext, MyService.class);
intent.putExtra(MyConstants.MY_EXTRA, c.getString(c.getColumnIndex(MyColumns.MY_COLUMN_TITLE)));
intent.setAction(MyConstants.MY_ACTION);
PendingIntent pendingIntent = PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.MyImageButton, pendingIntent);
在 RemoteViewsFactory
的 getViewAt
方法中。但是在单击 ImageButton 时服务不会启动。
我已经为 MyService 添加了一个带有 MY_ACTION 的 intentfilter。也试过没有它,但没有成功。
有人知道如何在 Android 主屏幕 App Widget 中点击列表视图项内的按钮启动服务吗?
一切正常,即 ListView 是从 SQLite 数据库完美填充的。
来自 android javadoc
public void setOnClickPendingIntent
Equivalent to calling
setOnClickListener(android.view.View.OnClickListener) to launch the
provided PendingIntent. When setting the on-click action of items
within collections (eg. ListView, StackView etc.), this method will
not work. Instead, use {@link
RemoteViews#setPendingIntentTemplate(int, PendingIntent) in
conjunction with RemoteViews#setOnClickFillInIntent(int, Intent).
在您的 AppWidgetProvider 的更新方法中,您必须添加
final PendingIntent clickPendingIntentTemplate = PendingIntent.getService...
views.setPendingIntentTemplate(R.id.widget_list, clickPendingIntentTemplate);
并在 RemoteViewsFactory 的 getViewAt 方法中:
final Intent fillInIntent = new Intent();
fillInIntent.putExtra(...);
views.setOnClickFillInIntent(R.id.widget_list_item, fillInIntent);
我正在为我的 Android 应用程序制作主屏幕应用程序小部件。在那个 App Widget 中有一个 ListView。该 ListView 有一个自定义布局,其中有一个 TextView 和一个 ImageButton。我正在该 ImageButton 上设置一个 PendingIntent 以启动服务,如下所示:
Intent intent = new Intent(mContext, MyService.class);
intent.putExtra(MyConstants.MY_EXTRA, c.getString(c.getColumnIndex(MyColumns.MY_COLUMN_TITLE)));
intent.setAction(MyConstants.MY_ACTION);
PendingIntent pendingIntent = PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.MyImageButton, pendingIntent);
在 RemoteViewsFactory
的 getViewAt
方法中。但是在单击 ImageButton 时服务不会启动。
我已经为 MyService 添加了一个带有 MY_ACTION 的 intentfilter。也试过没有它,但没有成功。
有人知道如何在 Android 主屏幕 App Widget 中点击列表视图项内的按钮启动服务吗?
一切正常,即 ListView 是从 SQLite 数据库完美填充的。
来自 android javadoc
public void setOnClickPendingIntent Equivalent to calling setOnClickListener(android.view.View.OnClickListener) to launch the provided PendingIntent. When setting the on-click action of items within collections (eg. ListView, StackView etc.), this method will not work. Instead, use {@link RemoteViews#setPendingIntentTemplate(int, PendingIntent) in conjunction with RemoteViews#setOnClickFillInIntent(int, Intent).
在您的 AppWidgetProvider 的更新方法中,您必须添加
final PendingIntent clickPendingIntentTemplate = PendingIntent.getService...
views.setPendingIntentTemplate(R.id.widget_list, clickPendingIntentTemplate);
并在 RemoteViewsFactory 的 getViewAt 方法中:
final Intent fillInIntent = new Intent();
fillInIntent.putExtra(...);
views.setOnClickFillInIntent(R.id.widget_list_item, fillInIntent);