Android Widget實(shí)例代碼解析
Android Widget實(shí)例代碼解析是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)Android Widget實(shí)例的應(yīng)用,通過代碼來實(shí)現(xiàn)內(nèi)容的講解,具體內(nèi)容的實(shí)現(xiàn)來看本文詳解。
下面的代碼分為3個(gè)文件可以清楚的看到整個(gè)框架,主要是AppWidgetProvider類中的onUpdate、onDeleted、onEnabled、onDisabled和updateAppWidget方法之間的狀態(tài)改變,使用Logcat仔細(xì)分析一個(gè)widget的生命周期。
- 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調(diào)試信息
- public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- Log.d(TAG, "onUpdate");
- // - 創(chuàng)建一個(gè)RemoteViews 對(duì)象
- // - 設(shè)置RemoteViews 對(duì)象的文本
- // - 告訴AppWidgetManager 顯示 views對(duì)象給widget.
- final int N = appWidgetIds.length;
- for (int i=0; i public void onEnabled(Context context) {
- Log.d(TAG, "onEnabled");
- // 當(dāng)widget創(chuàng)建時(shí)注冊(cè)TIMEZONE_CHANGED和 TIME_CHANGED改變的廣播獲取這些時(shí)間和區(qū)域的改變事件
- 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 appWidgetIds = new ArrayList();
- ArrayList texts = new ArrayList();
- ExampleAppWidgetConfigure.loadAllTitlePrefs(context, appWidgetIds, texts);
- final int N = appWidgetIds.size();
- for (int i=0; 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 appWidgetIds,
- ArrayList texts) {
- }
- }
小結(jié):Android Widget實(shí)例代碼解析的內(nèi)容介紹完了,希望通過Android Widget實(shí)例內(nèi)容的學(xué)習(xí)能對(duì)你有所幫助。