Android 在Appwidget的一个视图上使用两个PendingEvent
我有一个小部件类(扩展AppWidgetProvider),它在小部件的布局中只有一个视图(ImageView)。当用户点击小部件时,它会更新并毫无问题地启动一个活动。此外,小部件每30分钟更新一次,并在小部件更新后启动活动。我的问题是: 如何将小部件配置为仅在自动更新(而不是通过用户单击)时更新自身 这是我的密码:Android 在Appwidget的一个视图上使用两个PendingEvent,android,android-appwidget,android-pendingintent,Android,Android Appwidget,Android Pendingintent,我有一个小部件类(扩展AppWidgetProvider),它在小部件的布局中只有一个视图(ImageView)。当用户点击小部件时,它会更新并毫无问题地启动一个活动。此外,小部件每30分钟更新一次,并在小部件更新后启动活动。我的问题是: 如何将小部件配置为仅在自动更新(而不是通过用户单击)时更新自身 这是我的密码: public class Widget extends AppWidgetProvider { private static final String ACTION_UPDATE
public class Widget extends AppWidgetProvider {
private static final String ACTION_UPDATE = AppWidgetManager.ACTION_APPWIDGET_UPDATE;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
ComponentName cn = new ComponentName(context, Widget.class);
appWidgetManager.updateAppWidget(cn, remoteView(context));
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) {
ComponentName cn = new ComponentName(context, Widget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn,
remoteView(context));
Intent launch = new Intent(context, Main.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0);
try {
pi.send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
}
private RemoteViews remoteView(Context ctx) {
ArrayList<Integer> imageId = new ArrayList<Integer>();
for (int i = 1; i <= 30; i++) {
int drawableImageId = ctx.getResources().getIdentifier("image" + i,
"drawable", ctx.getPackageName());
imageId.add(drawableImageId);
}
RemoteViews rv = new RemoteViews(ctx.getPackageName(), R.layout.widget);
Calendar todayDate = Calendar.getInstance();
todayDate.setTimeInMillis(System.currentTimeMillis());
Calendar startDate = Calendar.getInstance();
startDate.set(2014, 05, 15);
int dayDiffer = Helper.getDiffernce(todayDate, startDate);
dayDiffer += 1;
if (dayDiffer >= 1 && dayDiffer <= 30) {
rv.setInt(R.id.img_widget, "setImageResource",
imageId.get(dayDiffer - 1));
T(ctx, "in >> " + dayDiffer);
} else if (dayDiffer >= 0) {
T(ctx, "before >> " + dayDiffer);
} else if (dayDiffer <= 31) {
T(ctx, "after >> " + dayDiffer);
}
Intent update = new Intent(ctx, Widget.class);
update.setAction(ACTION_UPDATE);
PendingIntent pi_update = PendingIntent.getBroadcast(ctx, 0, update, 0);
rv.setOnClickPendingIntent(R.id.img_widget, pi_update);
return rv;
}
public void T(Context context, String string) {
Toast.makeText(context, string, Toast.LENGTH_SHORT).show();
}
公共类小部件扩展了AppWidgetProvider{
私有静态最终字符串ACTION\u UPDATE=AppWidgetManager.ACTION\u APPWIDGET\u UPDATE;
@凌驾
public void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,
int[]appWidgetIds){
ComponentName cn=新的ComponentName(上下文,Widget.class);
updateAppWidgetManager.UpdateAppWidgetGet(cn,remoteView(上下文));
}
@凌驾
公共void onReceive(上下文、意图){
super.onReceive(上下文、意图);
if(intent.getAction().equalsIgnoreCase(操作\更新)){
ComponentName cn=新的ComponentName(上下文,Widget.class);
AppWidgetManager.getInstance(上下文).UpdateAppWidgetManager(cn,
远程视图(上下文);
意图启动=新意图(上下文,Main.class);
PendingIntent pi=PendingIntent.getActivity(上下文,0,启动,0);
试一试{
pi.send();
}捕获(取消异常e){
e、 printStackTrace();
}
}
}
专用远程视图远程视图(上下文ctx){
ArrayList imageId=新的ArrayList();
对于(int i=1;i=1&&daydevide=0){
T(ctx,“之前>>”+日差);
}否则,如果(DayDifference您可以使用android服务进行更新或自动启动活动更改“remoteView()”方法中的挂起内容:
新的“onReceive()”方法可能如下所示:
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) {
ComponentName cn = new ComponentName(context, Widget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn,
remoteView(context));
}
// the launch will always be executed,
// the update only for "ACTION_UPDATE"
Intent launch = new Intent(context, Main.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0);
try {
pi.send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
希望这会有所帮助!谢谢,但这是一个非常简单的小部件,应该保持简单,我认为有一种方法……这不会提供问题的答案。要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时对自己的帖子发表评论,一旦你有足够的评论,你就可以发表评论了。谢谢,是的,这是我得到的最好的解决方案,但我忘了在这里讲述它。
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) {
ComponentName cn = new ComponentName(context, Widget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn,
remoteView(context));
}
// the launch will always be executed,
// the update only for "ACTION_UPDATE"
Intent launch = new Intent(context, Main.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0);
try {
pi.send();
} catch (CanceledException e) {
e.printStackTrace();
}
}