2012-07-12 43 views
5

我正在开发日历小部件,并且当我更改日期MANODALLY时,我无法收到DATE_CHANGED消息。Android小部件无法接收DATE_CHANGED消息

什么问题?

我的清单代码:

<receiver android:name="com.widget.calendar.CalendarWidgetProvider"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     <action android:name="android.intent.action.DATE_CHANGED"/> 
    </intent-filter> 
    <!-- This specifies the widget provider info --> 
    <meta-data android:name="android.appwidget.provider" 
     android:resource="@xml/widgetinfo" /> 
</receiver> 

我试着接受它是这样的:

@Override 
public void onReceive(Context ctx, Intent intent) { 
    final String action = intent.getAction(); 
    if (action.equalsIgnoreCase("android.intent.action.DATE_CHANGED")) { 
     Log.e(TAG, "Date changed.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
    } 
    super.onReceive(ctx, intent); 
} 

但是,当我手动更改系统日期的日志不打印。

谢谢!

UPDATE:

Intent.ACTION_TIME_CHANGED解决了这个,这真是DATE_CHANGED的错误。

回答

7

使用此意图:

<intent-filter> 
     <action android:name="android.intent.action.TIME_SET"/> 
</intent-filter> 

和接收:

@Override 
public void onReceive(Context ctx, Intent intent) { 
    final String action = intent.getAction(); 
    if (action.equalsIgnoreCase("android.intent.action.TIME_SET")) { 
     Log.e(TAG, "Date changed.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
    } 
    super.onReceive(ctx, intent); 
} 
+0

但这样会导致耗尽你的电池,因为它会一次次给广播reciever每当时间会改变。 – Akram 2012-07-12 07:53:33

+1

@Akki我测试过它不会发送这个TIME_SET意图,除非我手动更改系统时间或日期。所以电池在这里是安全的。:) – herbertD 2012-07-12 08:27:00

+0

因此,当用户手动更改日期时,您想调用此接收器吗? – Akram 2012-07-12 09:06:07