android clockwidget
来源:互联网 发布:linux查看系统重启时间 编辑:程序博客网 时间:2024/05/18 00:30
有很多人写过appwidget,我也小试了一下,写了一个clockwidget:
不多说了,上源码:
代码路径:
从上到下依次上源码:ClockWidgetProvider.java
package com.example.clockwidget2;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.database.ContentObserver;import android.os.Handler;import android.provider.Settings;import android.util.Log;/** * AppWidgetProvider 继承自BroadcastReceiver,在AppWidget应用 update . enable . disable * 和delete时接收通知,其中,onUpdate onReceive是最常用到的方法 它们接收更新通知 AppWidgetProviderInfo * 描述AppWidget的大小,更新频率和初始界面等信息,以XML文件形式在于应用的res/xml目录下 AppWidgetManager * 负责管理AppWidget ,向AppWidgetProvider发送通知 RemoteViews 一个可以在其他应用进程 * 中运行的类,向AppWidgetProvider发送通知 * * @author Administrator * */public class ClockWidgetProvider extends AppWidgetProvider {private int[] mAppWidgetIds;private UpBroadcastReceiver mBroadbastReceiver;private Context mApplicationContext;private final static String TAG = "ClockWidgetProvider";@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onUpdate(context, appWidgetManager, appWidgetIds);mAppWidgetIds = appWidgetIds;Log.v(TAG, "-------onUpdate-------");IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_TIME_CHANGED);filter.addAction(Intent.ACTION_TIME_TICK);filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);filter.addAction(Intent.ACTION_LOCALE_CHANGED);filter.addAction(Intent.ACTION_DATE_CHANGED);// 实例化一个广播接收器mBroadbastReceiver = new UpBroadcastReceiver();Log.v(TAG, "-------mBroadbastReceiver-------");mApplicationContext = context.getApplicationContext();mApplicationContext.registerReceiver(mBroadbastReceiver, filter);mApplicationContext.getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true,new DateFormatChangeObserver(mApplicationContext));}private class DateFormatChangeObserver extends ContentObserver {private Context context;public DateFormatChangeObserver(Context context) {super(new Handler());this.context = context;}@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);Log.v(TAG, "-------DateFormatChangeObserver onChange-------");UpdateHelper.updateTime(context, mAppWidgetIds);}}public class UpBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubLog.v(TAG, "-------UpBroadcastReceiver onReceive-------");UpdateHelper.updateTime(context, mAppWidgetIds);}}}
UpdateHelper.java
package com.example.clockwidget2;import java.util.Calendar;import android.app.ActivityManager;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.content.Context;import android.content.Intent;import android.text.format.DateFormat;import android.text.format.DateUtils;import android.util.Log;import android.widget.RemoteViews;public class UpdateHelper {private final static String TAG = "updatehelper";private final static String M12 = "hh:mm";private final static String M24 = "kk:mm";private final static String WEEK_OF_DAY_FORMAT = "EEEE";public static void updateTime(Context context, int[] appWidgetIds) {// TODO Auto-generated method stubfinal int N = appWidgetIds.length;Log.d(TAG, "N = " + N);for (int i = 0; i < N; i++) {int appWidgetId = appWidgetIds[i];RemoteViews updateViews = new RemoteViews(context.getPackageName(),R.layout.main);Intent openApp = new Intent();openApp.setClassName("com.android.settings","com.android.settings.DateTimeSettings");openApp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,openApp, PendingIntent.FLAG_UPDATE_CURRENT);Log.d(TAG, "---PendingIntent---");updateViews.setOnClickPendingIntent(R.id.timeprovider,pendingIntent);Calendar calendar = Calendar.getInstance();calendar.setTimeInMillis(System.currentTimeMillis());boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(context);// 得到是否是24小时制String timeFormat = is24HourFormat ? M24 : M12;CharSequence newTime = DateFormat.format(timeFormat, calendar);Log.d(TAG, "---dateStr---" + Calendar.getInstance().getTime());String dateStr = android.text.format.DateFormat.getDateFormat(context).format(Calendar.getInstance().getTime()).replace("/", "-");if (!is24HourFormat) {String replacement = DateUtils.getAMPMString(calendar.get(Calendar.AM_PM));dateStr = dateStr + " " + replacement;}CharSequence dayStr = DateFormat.format(WEEK_OF_DAY_FORMAT,calendar);// 获取资源IDint resHourtenId = getTimeDrawable(newTime.charAt(0) - '0');int resHouroneId = getTimeDrawable(newTime.charAt(1) - '0');int resMintenId = getTimeDrawable(newTime.charAt(3) - '0');int resMinoneId = getTimeDrawable(newTime.charAt(4) - '0');// 在VIew上设置对应资源IDupdateViews.setImageViewResource(R.id.time_hour_ten, resHourtenId);updateViews.setImageViewResource(R.id.time_hour_one, resHouroneId);updateViews.setImageViewResource(R.id.time_min_ten, resMintenId);updateViews.setImageViewResource(R.id.time_min_one, resMinoneId);updateViews.setTextViewText(R.id.tv_date, dateStr);updateViews.setTextViewText(R.id.tv_week, dayStr);// 更新appwidgetAppWidgetManager manager = AppWidgetManager.getInstance(context);manager.updateAppWidget(appWidgetId, updateViews);}}private static int getTimeDrawable(int index) {// TODO Auto-generated method stubint drawableId = -1;switch (index) {case 0:drawableId = R.drawable.time0;break;case 1:drawableId = R.drawable.time1;break;case 2:drawableId = R.drawable.time2;break;case 3:drawableId = R.drawable.time3;break;case 4:drawableId = R.drawable.time4;break;case 5:drawableId = R.drawable.time5;break;case 6:drawableId = R.drawable.time6;break;case 7:drawableId = R.drawable.time7;break;case 8:drawableId = R.drawable.time8;break;case 9:drawableId = R.drawable.time9;break;}return drawableId;}}
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/timeprovider" android:layout_width="320.0dip" android:layout_height="147.0dip" android:background="@drawable/bg" android:orientation="vertical"><RelativeLayout android:id="@+id/timelayout" android:layout_width="fill_parent" android:layout_height="58.0dip" android:layout_marginTop="30.0dip" > <ImageView android:id="@+id/time_hour_ten" android:layout_width="40.0dip" android:layout_height="58.0dip" android:layout_marginLeft="56.0dip" android:src="@drawable/time_8" /> <ImageView android:id="@+id/time_hour_one" android:layout_width="40.0dip" android:layout_height="58.0dip" android:layout_alignTop="@id/time_hour_ten" android:layout_marginLeft="8.0dip" android:layout_toRightOf="@id/time_hour_ten" android:src="@drawable/time_8" /> <ImageView android:id="@+id/time_min_ten" android:layout_width="40.0dip" android:layout_height="58.0dip" android:layout_alignTop="@id/time_hour_one" android:layout_marginLeft="34.0dip" android:layout_toRightOf="@id/time_hour_one" android:src="@drawable/time_8" /> <ImageView android:id="@+id/time_min_one" android:layout_width="40.0dip" android:layout_height="58.0dip" android:layout_alignTop="@id/time_min_ten" android:layout_marginLeft="8.0dip" android:layout_toRightOf="@id/time_min_ten" android:baselineAlignBottom="true" android:src="@drawable/time_8" /></RelativeLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/tv_date" android:layout_width="1.0dip" android:layout_height="fill_parent" android:layout_weight="1.0" android:ellipsize="none" android:gravity="bottom" android:paddingBottom="7.0dip" android:paddingLeft="40.0dip" android:singleLine="true" android:textColor="#ff00c0ff" android:textSize="16.0sp" /> <TextView android:id="@+id/tv_week" android:layout_width="1.0dip" android:layout_height="fill_parent" android:layout_weight="1.0" android:ellipsize="none" android:gravity="right" android:paddingRight="40.0dip" android:paddingTop="28.0dip" android:singleLine="true" android:textColor="#ff00c0ff" android:textSize="16.0sp" /></LinearLayout></LinearLayout>
appwidget-provider.xml
<?xml version="1.0" encoding="UTF-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="250.0dip" android:minHeight="110.0dip" android:updatePeriodMillis="86400000" android:initialLayout="@layout/main" ></appwidget-provider>
androidmanifast.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.clockwidget2" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- <activity android:name="com.example.clockwidget2.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> --> <receiver android:name="com.example.clockwidget2.ClockWidgetProvider" > <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider" ></meta-data> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> </receiver> </application></manifest>
- android clockwidget
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- Emmet(ZenCoding) 语法
- java实现稳定的快速排序
- lseek
- 数据库的三大范式和五个要求
- MFC基础教程(简单计算器)<2>
- android clockwidget
- hdu33339 In Action
- NHibernate的使用方法(新手)
- 杭电2037
- 16、Hibernate二级缓存
- Svn版本控制工具的作用和应用
- read 函数和 write 函数
- Eclipse高级使用技巧
- U盘制作Mac系统启动盘图文教程