Android Widget实例代码解析

移动开发
Android Widget实例代码解析是本文要介绍的内容,主要是来了解并学习Android Widget实例的应用,来看内容详解。

Android Widget实例代码解析是本文要介绍的内容,主要是来了解并学习Android Widget实例的应用,通过代码来实现内容的讲解,具体内容的实现来看本文详解。

下面的代码分为3个文件可以清楚的看到整个框架,主要是AppWidgetProvider类中的onUpdate、onDeleted、onEnabled、onDisabled和updateAppWidget方法之间的状态改变,使用Logcat仔细分析一个widget的生命周期。

  1. package com.example.android.apis.appwidget;     
  2. import android.appwidget.AppWidgetManager;  
  3. import android.appwidget.AppWidgetProvider;  
  4. import android.content.ComponentName;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.content.pm.PackageManager;  
  8. import android.os.SystemClock;  
  9. import android.util.Log;  
  10. import android.widget.RemoteViews;    
  11. import java.util.ArrayList;  
  12. import com.example.android.apis.R;    
  13.  
  14. 涉及到的文件有  
  15.  
  16. ExampleAppWidgetConfigure.java  
  17. ExampleBroadcastReceiver.java  
  18. res/layout/appwidget_configure.xml  
  19. res/layout/appwidget_provider.xml  
  20. res/xml/appwidget_provider.xml  
  21.  
  22.  
  23. public class ExampleAppWidgetProvider extends AppWidgetProvider {  
  24.  
  25. private static final String TAG = "ExampleAppWidgetProvider"; //logcat调试信息    
  26. public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
  27. Log.d(TAG, "onUpdate");  
  28.  
  29. // - 创建一个RemoteViews 对象  
  30. // - 设置RemoteViews 对象的文本  
  31. // - 告诉AppWidgetManager 显示 views对象给widget.    
  32. final int N = appWidgetIds.length;  
  33. for (int i=0; i public void onEnabled(Context context) {  
  34. Log.d(TAG, "onEnabled");  
  35. // 当widget创建时注册TIMEZONE_CHANGED和 TIME_CHANGED改变的广播获取这些时间和区域的改变事件  
  36.  
  37. PackageManager pm = context.getPackageManager();  
  38. pm.setComponentEnabledSetting(  
  39. new ComponentName("com.example.android.apis", ".appwidget.ExampleBroadcastReceiver"),  
  40. PackageManager.COMPONENT_ENABLED_STATE_ENABLED,  
  41. PackageManager.DONT_KILL_APP);  
  42. }    
  43. public void onDisabled(Context context) {  
  44.  
  45. Log.d(TAG, "onDisabled");  
  46. Class clazz = ExampleBroadcastReceiver.class;  
  47. PackageManager pm = context.getPackageManager();  
  48. pm.setComponentEnabledSetting(  
  49. new ComponentName("com.example.android.apis", ".appwidget.ExampleBroadcastReceiver"),  
  50. PackageManager.COMPONENT_ENABLED_STATE_ENABLED,  
  51. PackageManager.DONT_KILL_APP);  
  52. }    
  53. static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,  
  54. int appWidgetId, String titlePrefix) {  
  55. Log.d(TAG, "updateAppWidget appWidgetId=" + appWidgetId + " titlePrefix=" + titlePrefix);  
  56.  
  57. CharSequence text = context.getString(R.string.appwidget_text_format,  
  58. ExampleAppWidgetConfigure.loadTitlePref(context, appWidgetId),  
  59. "0x" + Long.toHexString(SystemClock.elapsedRealtime()));    
  60. RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider);  
  61. views.setTextViewText(R.id.appwidget_text, text);    
  62. appWidgetManager.updateAppWidget(appWidgetId, views);  
  63. }  
  64. }    
  65.  
  66. package com.example.android.apis.appwidget;    
  67. import android.appwidget.AppWidgetManager;  
  68. import android.appwidget.AppWidgetProvider;  
  69. import android.content.BroadcastReceiver;  
  70. import android.content.ComponentName;  
  71. import android.content.Context;  
  72. import android.content.Intent;  
  73. import android.os.SystemClock;  
  74. import android.util.Log;  
  75. import android.widget.RemoteViews;    
  76. import java.util.ArrayList;    
  77.  
  78. import com.example.android.apis.R;    
  79.  
  80. public class ExampleBroadcastReceiver extends BroadcastReceiver {    
  81. public void onReceive(Context context, Intent intent) {  
  82. Log.d("ExmampleBroadcastReceiver", "intent=" + intent);    
  83. // For our example, we'll also update all of the widgets when the timezone  
  84. // changes, or the user or network sets the time.  
  85. String action = intent.getAction();  
  86. if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)  
  87. || action.equals(Intent.ACTION_TIME_CHANGED)) {  
  88. AppWidgetManager gm = AppWidgetManager.getInstance(context);  
  89. ArrayList appWidgetIds = new ArrayList();  
  90. ArrayList texts = new ArrayList();    
  91. ExampleAppWidgetConfigure.loadAllTitlePrefs(context, appWidgetIds, texts);    
  92. final int N = appWidgetIds.size();  
  93. for (int i=0; i}  
  94.  
  95.  
  96. package com.example.android.apis.appwidget;    
  97. import android.app.Activity;  
  98. import android.appwidget.AppWidgetManager;  
  99. import android.content.Context;  
  100. import android.content.Intent;  
  101. import android.content.SharedPreferences;  
  102. import android.os.Bundle;  
  103. import android.util.Log;  
  104. import android.view.View;  
  105. import android.widget.EditText;    
  106. import java.util.ArrayList;    
  107.  
  108. import com.example.android.apis.R;    
  109.  
  110. public class ExampleAppWidgetConfigure extends Activity {  
  111. static final String TAG = "ExampleAppWidgetConfigure";    
  112. private static final String PREFS_NAME 
  113. "com.example.android.apis.appwidget.ExampleAppWidgetProvider";  
  114. private static final String PREF_PREFIX_KEY = "prefix_";    
  115. int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;  
  116. EditText mAppWidgetPrefix;    
  117. public ExampleAppWidgetConfigure() {  
  118. super();  
  119. }    
  120. @Override  
  121. public void onCreate(Bundle icicle) {  
  122. super.onCreate(icicle);    
  123. setResult(RESULT_CANCELED);    
  124. setContentView(R.layout.appwidget_configure);    
  125. mAppWidgetPrefix = (EditText)findViewById(R.id.appwidget_prefix);    
  126. findViewById(R.id.save_button).setOnClickListener(mOnClickListener);    
  127. Intent intent = getIntent();  
  128. Bundle extras = intent.getExtras();  
  129. if (extras != null) {  
  130. mAppWidgetId = extras.getInt(  
  131. AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);  
  132. }    
  133. if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {  
  134. finish();  
  135. }    
  136. mAppWidgetPrefix.setText(loadTitlePref(ExampleAppWidgetConfigure.this, mAppWidgetId));  
  137. }    
  138. View.OnClickListener mOnClickListener = new View.OnClickListener() {  
  139. public void onClick(View v) {  
  140. final Context context = ExampleAppWidgetConfigure.this;    
  141. String titlePrefix = mAppWidgetPrefix.getText().toString();  
  142. saveTitlePref(context, mAppWidgetId, titlePrefix);    
  143. AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  
  144. ExampleAppWidgetProvider.updateAppWidget(context, appWidgetManager,  
  145. mAppWidgetId, titlePrefix);    
  146. Intent resultValue = new Intent();  
  147. resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);  
  148. setResult(RESULT_OK, resultValue);  
  149. finish();  
  150. }  
  151. };    
  152. static void saveTitlePref(Context context, int appWidgetId, String text) {  
  153. SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, 0).edit();  
  154. prefs.putString(PREF_PREFIX_KEY + appWidgetId, text);  
  155. prefs.commit();  
  156. }    
  157.  
  158. static String loadTitlePref(Context context, int appWidgetId) {  
  159. SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);  
  160. String prefix = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null);  
  161. if (prefix != null) {  
  162. return prefix;  
  163. } else {  
  164. return context.getString(R.string.appwidget_prefix_default);  
  165. }  
  166. }    
  167. static void deleteTitlePref(Context context, int appWidgetId) {  
  168. }    
  169. static void loadAllTitlePrefs(Context context, ArrayList appWidgetIds,  
  170. ArrayList texts) {  
  171. }  
  172. }  

小结:Android Widget实例代码解析的内容介绍完了,希望通过Android Widget实例内容的学习能对你有所帮助。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-09-07 17:54:40

Android Wid开发

2011-09-09 13:23:17

Widget

2011-09-09 10:00:20

Android Wid开发

2011-02-28 13:04:27

RelativeLayAndroid Wid

2011-09-08 13:11:07

Android Wid实例

2011-09-07 13:42:36

Android Wid实例

2011-09-07 14:39:47

Android Wid设计

2011-09-08 15:40:45

Android Wid组件

2011-09-08 14:01:01

Android Wid实例

2011-09-07 14:25:53

Android Wid设计

2011-09-07 13:30:48

Android WidTabWidget

2011-09-08 13:36:26

Android Wid播放器

2011-09-07 14:34:55

Android Wid控件

2011-09-09 17:59:26

QT Widget

2010-07-13 09:08:27

Widget开发

2011-09-09 19:23:52

Widget

2011-09-08 14:21:37

jQueryWidget

2011-09-08 16:17:45

Widget

2013-02-20 15:29:00

JSONAndroid开发

2011-09-07 14:20:42

Android Wid组件
点赞
收藏

51CTO技术栈公众号