Android 桌面小组件Timer时钟使用场景

来源:互联网 发布:工业设计制图软件 编辑:程序博客网 时间:2024/04/29 00:41


首先新建一个Floder文件夹叫xml然后建一个appconfig.xml主要信息如下

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/activity_widget"
    android:minHeight="40dp"  这里指的是最低高度                        
    android:minWidth="100dp"  这里指最低宽度
    android:updatePeriodMillis="86400000" > 这里是多久刷新一次秒
</appwidget-provider>

其次跟大家说下AppWidgetManager这个类

查看API知道主要方法有

onDeleted() Widget被从屏幕移除

onDisabled() 

onEnabled()

onReceive()

@Override
public void onDisabled(Context context) {
// 最后一个wdiget从屏幕中移除
super.onDisabled(context);
context.stopService(new Intent(context,TimerService.class));
}

@Override
public void onEnabled(Context context) {
// 添加widget到屏幕
super.onEnabled(context);
context.startService(new Intent(context, TimerService.class));
然后创建一个TimerService用来执行后台的时间刷新

package com.weixin.service;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


import com.weixin.R;
import com.weixin.widget.WidgetProvider;


import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;

public class TimerService extends Service {
private static final String TAG = "TimeService";
private Timer timer=null;

         //时间格式化类
private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
  @Override
public void onCreate() {
//初始化
super.onCreate();
timer=new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
updateViews();
}
            //1秒刷新一次

}, 0, 1000);
Log.i(TAG, "---onCreate----");
}
  @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "---onDestory----");
timer=null;
}
  private void updateViews() {
 // 将时间转字符串格式
 

 String time=sdf.format(new Date());

        
 RemoteViews rv=new RemoteViews(getPackageName(),R.layout.activity_widget); 

          //显示事件的TextView

 rv.setTextViewText(R.id.tv_widget, time);

         //获取桌面小组件的实例
 AppWidgetManager manager=AppWidgetManager.getInstance(getApplicationContext());
  //组件的名称
 ComponentName cn=new ComponentName(getApplicationContext(), WidgetProvider.class);

          //更新组件
 manager.updateAppWidget(cn, rv);
  }
}

最后别忘记在Androidmainfest.xml里面配置Service和WidgetProvider信息

   <receiver android:name="com.weixin.widget.WidgetProvider" >  <--自定义的WidgetProvider-->
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/appconfig" />
        </receiver>
      


        <service android:name="com.weixin.service.TimerService" >
        </service>


0 0
原创粉丝点击