Android Widget实例代码解析

本文详细解析了 Android Widget 的实例代码,介绍了 AppWidgetProvider 类中关键方法的作用,并展示了如何通过代码实现 Widget 的更新与配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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实例内容的学习能对你有所帮助。

    【编辑推荐】

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值