Android 小部件 Onclick 按钮或方法或来自另一个 Activity 的方法?
Android Widget Onclick Button or Method or Method from another Activity?
我有一个带小部件的普通应用程序(小部件是一个图像按钮)。单击小部件时,我想调用 MainActivity
中的方法或 WidgetProvider
activity 中的方法,或者将 onClick
附加到小部件,它在我单击时执行某些操作它。我已经阅读了文档,但我唯一发现的是如何使用小部件打开 activity。
我的 WidgetProvider Activity 代码:
package ali.simpleflaslight;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.media.MediaPlayer;
import android.net.Uri;
import android.widget.ImageButton;
import android.widget.RemoteViews;
public class WidgetProvider 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, MainActivity.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_layout);
views.setOnClickPendingIntent(R.id.imageButton, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
public void someMethod() {
//I want this method called when imagebutton is pressed.
}
}
使用上面的代码,单击小部件只会显示我的 MainActivity
。
在 AndroidManifest.xml
文件的 <receiver><intent-filter>
标签中添加一个动作:
<action android:name="MY_PACKAGE_NAME.WIDGET_BUTTON" />
声明:
public static String WIDGET_BUTTON = "MY_PACKAGE_NAME.WIDGET_BUTTON";
在 onUpdate()
方法中添加一个与操作匹配的未决意图:
Intent intent = new Intent(WIDGET_BUTTON);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.MY_BUTTON_ID, pendingIntent);
最后,在onRecieve()方法中:
if (WIDGET_BUTTON.equals(intent.getAction())) {
//Your Code
}
我有一个带小部件的普通应用程序(小部件是一个图像按钮)。单击小部件时,我想调用 MainActivity
中的方法或 WidgetProvider
activity 中的方法,或者将 onClick
附加到小部件,它在我单击时执行某些操作它。我已经阅读了文档,但我唯一发现的是如何使用小部件打开 activity。
我的 WidgetProvider Activity 代码:
package ali.simpleflaslight;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.media.MediaPlayer;
import android.net.Uri;
import android.widget.ImageButton;
import android.widget.RemoteViews;
public class WidgetProvider 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, MainActivity.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_layout);
views.setOnClickPendingIntent(R.id.imageButton, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
public void someMethod() {
//I want this method called when imagebutton is pressed.
}
}
使用上面的代码,单击小部件只会显示我的 MainActivity
。
在 AndroidManifest.xml
文件的 <receiver><intent-filter>
标签中添加一个动作:
<action android:name="MY_PACKAGE_NAME.WIDGET_BUTTON" />
声明:
public static String WIDGET_BUTTON = "MY_PACKAGE_NAME.WIDGET_BUTTON";
在 onUpdate()
方法中添加一个与操作匹配的未决意图:
Intent intent = new Intent(WIDGET_BUTTON);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.MY_BUTTON_ID, pendingIntent);
最后,在onRecieve()方法中:
if (WIDGET_BUTTON.equals(intent.getAction())) {
//Your Code
}