首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setRepeating不适用于小部件

setRepeating不适用于小部件
EN

Stack Overflow用户
提问于 2010-12-24 03:47:04
回答 1查看 1K关注 0票数 0

我有一个wigdet,它每分钟都会更新一次(但只有在手机唤醒的时候)。但是,在onEnabled方法中调用setRepeating()之后,警报似乎永远不会响起。我做错了什么?下面(我认为)是相关的代码。

代码语言:javascript
复制
public class BusStopWidgetProvider extends AppWidgetProvider{

private static AlarmManager alarmManager;
private static PendingIntent pendingIntent;
private static LinkSchedule linkSchedule;

@Override
public void onReceive(Context context, Intent intent){
    super.onReceive(context, intent);
    Log.i("special", "in on recieve with" + intent.getAction());
    if(
        intent.getAction().equals(context.getString(R.string.widget_update_action)) ||
        intent.getAction().equals(Intent.ACTION_TIME_CHANGED) ||
        intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED))
    {

        AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
        ComponentName appWidgetName = 
            new ComponentName(context, BusStopWidgetProvider.class);    
        int[] appWidgetIds = widgetManager.getAppWidgetIds(appWidgetName);
        onUpdate(context, widgetManager, appWidgetIds);
    }
}

@Override
public void onEnabled(Context context){

    linkSchedule = LinkSchedule.getLinkSchedule(context.getResources());
    Intent updateIntent = 
        new Intent(context.getString(R.string.widget_update_action));
    pendingIntent = 
        PendingIntent.getBroadcast(context, 0, updateIntent, 0);
    alarmManager = 
        (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    GregorianCalendar nextMinute = (GregorianCalendar)Calendar.getInstance();
    nextMinute.add(Calendar.MINUTE, 1);
    nextMinute.set(Calendar.SECOND, 0);

    alarmManager.setRepeating(
        AlarmManager.RTC, 
        nextMinute.getTimeInMillis(),
        60000,
        pendingIntent);
}

@Override
public void onDisabled(Context context){

    alarmManager.cancel(pendingIntent);
}

@Override
public void onUpdate(
    Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
    final int N = appWidgetIds.length;
    for(int i=0; i<N; i++){
        int appWidgetId = appWidgetIds[i];
        RemoteViews views = new RemoteViews(context.getPackageName(), 
            R.layout.bus_stop_widget);
        views.setTextViewText(R.id.time, linkSchedule.getNextTime(context.getString(R.string.sexton_name)));
        views.setTextViewText(R.id.stopLabel, context.getString(R.string.sexton_name));
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-24 13:25:16

问题出在我的清单文件中。显然,我不能使用字符串资源作为要过滤的操作的名称。换句话说,这不是这不起作用:

代码语言:javascript
复制
<intent-filter>
  <action android:name="@string/name_of_intent"/>
</intent-filter>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4521953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档