实现时间Widget自动更新

很简单的功能,废话不多说,直接上代码:

AndroidMainfest.xml:




    
        
        
            
                
            

            
        

        

        
    








time_widge.xml:



    
    




time_widget_info.xml:








TimeWidget.java:

public class TimeWidget extends AppWidgetProvider {



    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        /*
         * 构造pendingIntent发广播,onReceive()根据收到的广播,更新
         */
        Intent intent = new Intent(context, TimeWidgetService.class);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.time_widget);
        rv.setOnClickPendingIntent(R.id.start, pendingIntent);
        appWidgetManager.updateAppWidget(appWidgetIds, rv);
    }

    @Override
    public void onEnabled(Context context) {
        // Enter relevant functionality for when the first widget is created
    }

    @Override
    public void onDisabled(Context context) {
        // Enter relevant functionality for when the last widget is disabled

    }
}



TimeWidgetService.java:

public class TimeWidgetService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        final RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.time_widget);
        final ComponentName componentName = new ComponentName(this, TimeWidget.class);
        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);

        final Handler handler = new Handler();
        Runnable runnable = new Runnable(){
            @Override
            public void run() {
                SimpleDateFormat formatter = new SimpleDateFormat ("HH:mm:ss");
                Date curDate = new Date(System.currentTimeMillis());//获取当前时间
                String str = formatter.format(curDate);
                remoteViews.setTextViewText(R.id.counter, str);
                appWidgetManager.updateAppWidget(componentName, remoteViews);
                handler.postDelayed(this, 500);// 150是延时时长
            }
        };
        handler.postDelayed(runnable, 500);// 打开定时器,执行操作
        return Service.START_STICKY;
    }
}






这样就实现了基本的功能

你可能感兴趣的:(Android开发笔记)