返回
顶部

修改密码

首页 > 教程 > 网络通信 > HTTP > 正文
ApiDemos中的Android Widget例子解析

+1

-1

收藏

+1

-1

点赞0

评论0

我们的Android Widget开发之旅开始啦,看看Android SDK中ApiDemos上的Widget例子,代码分为3个文件可以清楚的看到整个框架,主要是AppWidgetProvider类中的onUpdate、onDeleted、 onEnabled、onDisabled和updatpackage com。example。android。apis。appwidget;import andr…
我们的Android Widget开发之旅开始啦,看看Android SDK中ApiDemos上的Widget例子,代码分为3个文件可以清楚的看到整个框架,主要是AppWidgetProvider类中的onUpdate、onDeleted、 onEnabled、onDisabled和updat

package com。example。android。apis。appwidget;

  import android。appwidget。AppWidgetManager;

  import android。appwidget。AppWidgetProvider;

  import android。content。ComponentName;

  import android。content。Context;

  import android。content。Intent;

  import android。content。pm。PackageManager;

  import android。os。SystemClock;

  import android。util。Log;

  import android。widget。RemoteViews;

  import java。util。ArrayList;

  import com。example。android。apis。R;

  涉及到的文件有

  ExampleAppWidgetConfigure。java

  ExampleBroadcastReceiver。java

  res/layout/appwidget_configure。xml

  res/layout/appwidget_provider。xml

  res/xml/appwidget_provider。xml

  public class ExampleAppWidgetProvider extends AppWidgetProvider {

  private static final String TAG = "ExampleAppWidgetProvider"; //logcat调试信息

  public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

  Log。d(TAG, "onUpdate");

  // - 创建一个RemoteViews 对象

  // - 设置RemoteViews 对象的文本

  // - 告诉AppWidgetManager 显示 views对象给widget。

  final int N = appWidgetIds。length;

  for (int i=0; i<N; i++) {

  int appWidgetId = appWidgetIds[i];

  String titlePrefix = ExampleAppWidgetConfigure。loadTitlePref(context, appWidgetId);

  updateAppWidget(context, appWidgetManager, appWidgetId, titlePrefix);

  }

  }

  public void onDeleted(Context context, int[] appWidgetIds) {

  Log。d(TAG, "onDeleted");

  // 当用户删除Widget时触发该

  final int N = appWidgetIds。length;

  for (int i=0; i<N; i++) {

  ExampleAppWidgetConfigure。deleteTitlePref(context, appWidgetIds[i]);

  }

  }

  public void onEnabled(Context context) {

  Log。d(TAG, "onEnabled");

  // 当widget创建时注册TIMEZONE_CHANGED 和 TIME_CHANGED改变的广播获取这些时间和区域的改变事件

  PackageManager pm = context。getPackageManager();

  pm。setComponentEnabledSetting(

  new ComponentName("com。example。android。apis", "。appwidget。ExampleBroadcastReceiver"),

  PackageManager。COMPONENT_ENABLED_STATE_ENABLED,

  PackageManager。DONT_KILL_APP);

  }

  public void onDisabled(Context context) {

  Log。d(TAG, "onDisabled");

  Class clazz = ExampleBroadcastReceiver。class;

  PackageManager pm = context。getPackageManager();

  pm。setComponentEnabledSetting(

  new ComponentName("com。example。android。apis", "。appwidget。ExampleBroadcastReceiver"),

  PackageManager。COMPONENT_ENABLED_STATE_ENABLED,

  PackageManager。DONT_KILL_APP);

  }

  static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,

  int appWidgetId, String titlePrefix) {

  Log。d(TAG, "updateAppWidget appWidgetId=" + appWidgetId + " titlePrefix=" + titlePrefix);

  CharSequence text = context。getString(R。string。appwidget_text_format,

  ExampleAppWidgetConfigure。loadTitlePref(context, appWidgetId),

  "0x" + Long。toHexString(SystemClock。elapsedRealtime()));

  RemoteViews views = new RemoteViews(context。getPackageName(), R。layout。appwidget_provider);

  views。setTextViewText(R。id。appwidget_text, text);

  appWidgetManager。updateAppWidget(appWidgetId, views);

  }

  }

  package com。example。android。apis。appwidget;

  import android。appwidget。AppWidgetManager;

  import android。appwidget。AppWidgetProvider;

  import android。content。BroadcastReceiver;

  import android。content。ComponentName;

  import android。content。Context;

  import android。content。Intent;

  import android。os。SystemClock;

  import android。util。Log;

  import android。widget。RemoteViews;

  import java。util。ArrayList;

  import com。example。android。apis。R;

  public class ExampleBroadcastReceiver extends BroadcastReceiver {

  public void onReceive(Context context, Intent intent) {

  Log。d("ExmampleBroadcastReceiver", "intent=" + intent);

  // For our example, we'll also update all of the widgets when the timezone

  // changes, or the user or network sets the time。

  String action = intent。getAction();

  if (action。equals(Intent。ACTION_TIMEZONE_CHANGED)

  || action。equals(Intent。ACTION_TIME_CHANGED)) {

  AppWidgetManager gm = AppWidgetManager。getInstance(context);

  ArrayList<Integer> appWidgetIds = new ArrayList();

  ArrayList<String> texts = new ArrayList();

  ExampleAppWidgetConfigure。loadAllTitlePrefs(context, appWidgetIds, texts);

  final int N = appWidgetIds。size();

  for (int i=0; i<N; i++) {

  ExampleAppWidgetProvider。updateAppWidget(context, gm, appWidgetIds。get(i), texts。get(i));

  }

  }

  }

  }

  package com。example。android。apis。appwidget;

  import android。app。Activity;

  import android。appwidget。AppWidgetManager;

  import android。content。Context;

  import android。content。Intent;

  import android。content。SharedPreferences;

  import android。os。Bundle;

  import android。util。Log;

  import android。view。View;

  import android。widget。EditText;

  import java。util。ArrayList;

  import com。example。android。apis。R;

  public class ExampleAppWidgetConfigure extends Activity {

  static final String TAG = "ExampleAppWidgetConfigure";

  private static final String PREFS_NAME

  = "com。example。android。apis。appwidget。ExampleAppWidgetProvider";

  private static final String PREF_PREFIX_KEY = "prefix_";

  int mAppWidgetId = AppWidgetManager。INVALID_APPWIDGET_ID;

  EditText mAppWidgetPrefix;

  public ExampleAppWidgetConfigure() {

  super();

  }

  @Override

  public void onCreate(Bundle icicle) {

  super。onCreate(icicle);

  setResult(RESULT_CANCELED);

  setContentView(R。layout。appwidget_configure);

  mAppWidgetPrefix = (EditText)findViewById(R。id。appwidget_prefix);

  findViewById(R。id。save_button)。setOnClickListener(mOnClickListener);

  Intent intent = getIntent();

  Bundle extras = intent。getExtras();

  if (extras != null) {

  mAppWidgetId = extras。getInt(

  AppWidgetManager。EXTRA_APPWIDGET_ID, AppWidgetManager。INVALID_APPWIDGET_ID);

  }

  if (mAppWidgetId == AppWidgetManager。INVALID_APPWIDGET_ID) {

  finish();

  }

  mAppWidgetPrefix。setText(loadTitlePref(ExampleAppWidgetConfigure。this, mAppWidgetId));

  }

  View。OnClickListener mOnClickListener = new View。OnClickListener() {

  public void onClick(View v) {

  final Context context = ExampleAppWidgetConfigure。this;

  String titlePrefix = mAppWidgetPrefix。getText()。toString();

  saveTitlePref(context, mAppWidgetId, titlePrefix);

  AppWidgetManager appWidgetManager = AppWidgetManager。getInstance(context);

  ExampleAppWidgetProvider。updateAppWidget(context, appWidgetManager,

  mAppWidgetId, titlePrefix);

  Intent resultValue = new Intent();

  resultValue。putExtra(AppWidgetManager。EXTRA_APPWIDGET_ID, mAppWidgetId);

  setResult(RESULT_OK, resultValue);

  finish();

  }

  };

  static void saveTitlePref(Context context, int appWidgetId, String text) {

  SharedPreferences。Editor prefs = context。getSharedPreferences(PREFS_NAME, 0)。edit();

  prefs。putString(PREF_PREFIX_KEY + appWidgetId, text);

  prefs。commit();

  }

  static String loadTitlePref(Context context, int appWidgetId) {

  SharedPreferences prefs = context。getSharedPreferences(PREFS_NAME, 0);

  String prefix = prefs。getString(PREF_PREFIX_KEY + appWidgetId, null);

  if (prefix != null) {

  return prefix;

  } else {

  return context。getString(R。string。appwidget_prefix_default);

  }

  }

  static void deleteTitlePref(Context context, int appWidgetId) {

  }

  static void loadAllTitlePrefs(Context context, ArrayList<Integer> appWidgetIds,

  ArrayList<String> texts) {

  }

  }

扫一扫在手机打开

评论
已有0条评论
0/150
提交
热门评论
相关推荐
今日要闻
换一批
热点排行