【发布时间】:2014-02-28 16:17:45
【问题描述】:
这是我的提供程序小部件的 prgrm
public class MyWidgetProvider extends AppWidgetProvider {
MyWidgetIntentProvider mwip=new MyWidgetIntentProvider();
private PendingIntent service = null;
public static final String ACTION_AUTO_UPDATE = "AUTO_UPDATE";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds){
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);
remoteViews.setImageViewResource(R.id.widget_image, mwip.getImageToSet());
//remoteViews.setOnClickPendingIntent(R.id.widget_image, buildImageViewPendingIntent(context));
pushWidgetUpdate(context, remoteViews);
final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final Calendar TIME = Calendar.getInstance();
TIME.set(Calendar.MINUTE, 0);
TIME.set(Calendar.SECOND, 0);
TIME.set(Calendar.MILLISECOND, 0);
final Intent i = new Intent(context, MyService.class);
if (service == null)
{
service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
}
m.setRepeating(AlarmManager.RTC, TIME.getTime().getTime(), 1000 * 60, service);
}
public static PendingIntent buildImageViewPendingIntent(Context context) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction("com.chaturvedi.intent.action.CHANGE_PICTURE");
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
// TODO Auto-generated method stub
ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, remoteViews);
}
@Override
public void onDisabled(Context context)
{
final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
m.cancel(service);
}
}
出于意图
public class MyWidgetIntentProvider {
private int day;
private int hours;
private int minutes;
private void updateWidgetPicture(Context context) {
// TODO Auto-generated method stub
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main);
remoteViews.setImageViewResource(R.id.widget_image, getImageToSet());//must refresh button click listener
remoteViews.setOnClickPendingIntent(R.id.widget_image,MyWidgetProvider.buildImageViewPendingIntent(context));
MyWidgetProvider.pushWidgetUpdate(context.getApplicationContext(), remoteViews);
}
public int getImageToSet()
{
// code to select image
}
服务
public class MyService extends Service {
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
buildUpdate();
return super.onStartCommand(intent, flags, startId);
}
private void buildUpdate()
{
String lastUpdated = DateFormat.format("MMMM dd, yyyy h:mmaa", new Date(0)).toString();
RemoteViews view = new RemoteViews(getPackageName(), R.layout.activity_main);
view.setTextViewText(R.id.action_settings, lastUpdated);
ComponentName thisWidget = new ComponentName(this, MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, view);
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
清单文件
<receiver android:name="MyWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<intent-filter>
<action android:name="AUTO_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/demo_widget_provider" />
<service android:name=".UpdateWidgetService"></service>
</receiver>
这是我运行小部件的代码。我已经知道如何使用默认更新时间运行,即,最短为 30 分钟,但希望在 15 分钟后更新,以便在适当的时间运行
【问题讨论】:
标签: android service android-widget alarmmanager android-pendingintent