【问题标题】:want to update widget using AlarmManager for time table app for every 15minutes想要每 15 分钟使用闹钟管理器更新时间表应用程序的小部件
【发布时间】: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


    【解决方案1】:

    我通过我自己的警报管理器专门为您重新制作了它。 1.在Android Manifest中添加一个注册接收器的动作:“com.stackoverflow.by.bgplaya” 2. 您必须创建该类的实例并在 onEnable 方法中调用 startAlarm() 并在 onDisable 方法中调用 stopAlam()。这将允许您从创建第一个小部件到销毁最后一个小部件进行小部件更新。

    public class AppWidgetAlarm {
    
        private final int INTERVAL_MILLIS = 15000;
        private Context mContext;
        private int ALARM_ID = 0;
        private final String ACTION_SIMPLE_UPDATE = "com.stackoverflow.by.bgplaya";
    
        public AppWidgetAlarm(Context context) {
            mContext = context;
        }
    
        public void startAlarm() {
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.MILLISECOND, INTERVAL_MILLIS);
    
            Intent alarmIntent = new Intent(ACTION_SIMPLE_UPDATE);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, ALARM_ID, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), INTERVAL_MILLIS, pendingIntent);
        }
    
        public void stopAlarm() {
            PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, ALARM_ID, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);
        }
    }
    

    【讨论】:

    • 非常感谢。我会尽力让你回来。
    • 你还没试过吗?
    • 不,它没有用。这段代码后应用开始挂起 y 我不知道
    • 这在生产中使用的应用程序中为我工作。也许您还没有正确实施?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多