From 04c72b47d877c9f3b45caa1ddc7f640b02e7be4c Mon Sep 17 00:00:00 2001 From: Scott Main Date: Wed, 13 May 2009 16:48:13 -0700 Subject: [PATCH] AI 148812: revise the AppWidget developer guide documentation BUG=1827433 Automated import of CL 148812 --- docs/html/guide/guide_toc.cs | 4 +- docs/html/guide/topics/appwidgets/index.jd | 493 +++++++++++++++++---- docs/html/images/appwidget.png | Bin 0 -> 17414 bytes 3 files changed, 403 insertions(+), 94 deletions(-) create mode 100644 docs/html/images/appwidget.png diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index 5367cb2e7ec55..a044ceaecd3b9 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -95,7 +95,7 @@ --> -
  • AppWidgets
  • +
  • App Widgets
  • @@ -146,7 +146,7 @@
  • UI Guidelines
  • Designing for Performance
  • diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd index f9db356d75543..01a96484e4183 100644 --- a/docs/html/guide/topics/appwidgets/index.jd +++ b/docs/html/guide/topics/appwidgets/index.jd @@ -1,4 +1,4 @@ -page.title=AppWidgets +page.title=App Widgets @jd:body
    @@ -6,131 +6,338 @@ page.title=AppWidgets

    Key classes

    1. {@link android.appwidget.AppWidgetProvider}
    2. -
    3. {@link android.appwidget.AppWidgetHost}
    4. +
    5. {@link android.appwidget.AppWidgetProviderInfo}
    6. +
    7. {@link android.appwidget.AppWidgetManager}

    In this document

      -
    1. AppWidget Providers +
    2. The Basics
    3. +
    4. Declaring an App Widget in the Manifest
    5. +
    6. Adding the AppWidgetProviderInfo Metadata
    7. +
    8. Creating the App Widget Layout
    9. +
    10. Using the AppWidgetProvider Class
        -
      1. Declaring a widget in the AndroidManifest
      2. -
      3. Adding the AppWidgetProviderInfo meta-data
      4. -
      5. Using the AppWidgetProvider class
      6. -
      7. AppWidget Configuration UI
      8. -
      9. AppWidget Broadcast Intents
      10. +
      11. Receiving App Widget broadcast Intents
      12. +
      +
    11. +
    12. Creating an App Widget Configuration Activity +
        +
      1. Updating the App Widget from + the configuration Activity
    13. -
    14. AppWidget Hosts

    See also

      +
    1. App Widget Design + Guidelines
    2. Introducing - home screen widgets and the AppWidget framework »
    3. + home screen widgets and the AppWidget framework »
    -

    AppWidgets are miniature application views that can be embedded in other applications -(e.g., the Home). These views are called "widgets" and you can publish one with -an "AppWidget provider." An application component that is able to hold other widgets is -called an "AppWidget host."

    + +

    App Widgets are miniature application views that can be embedded in other applications +(such as the Home screen) and receive periodic updates. These views are referred +to as Widgets in the user interface, +and you can publish one with an App Widget provider. An application component that is +able to hold other App Widgets is called an App Widget host. The screenshot below shows +the Music App Widget.

    + + + +

    This document describes how to publish an App Widget using an App Widget provider.

    +

    The Basics

    + +

    To create an App Widget, you need the following:

    + +
    +
    {@link android.appwidget.AppWidgetProviderInfo} object
    +
    Describes the metadata for an App Widget, such as the App Widget's layout, update frequency, + and the AppWidgetProvider class. This should be defined in XML.
    +
    {@link android.appwidget.AppWidgetProvider} class implementation
    +
    Defines the basic methods that allow you to programmatically interface with the App Widget, + based on broadcast events. Through it, you will receive broadcasts when the App Widget is updated, + enabled, disabled and deleted.
    +
    View layout
    +
    Defines the initial layout for the App Widget, defined in XML.
    +
    + +

    Additionally, you can implement an App Widget configuration Activity. This is an optional +{@link android.app.Activity} that launches when the user adds your App Widget and allows him or her +to modify App Widget settings at create-time.

    + +

    The following sections describe how to setup each of these components.

    -

    AppWidget Providers

    -

    Any application can publish widgets. All an application needs to do to publish a widget is -to have a {@link android.content.BroadcastReceiver} that receives the {@link -android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE AppWidgetManager.ACTION_APPWIDGET_UPDATE} intent, -and provide some meta-data about the widget. Android provides the -{@link android.appwidget.AppWidgetProvider} class, which extends BroadcastReceiver, as a convenience -class to aid in handling the broadcasts. +

    Declaring an App Widget in the Manifest

    +

    First, declare the {@link android.appwidget.AppWidgetProvider} class in your application's +AndroidManifest.xml file. For example:

    -

    Declaring a widget in the AndroidManifest

    +
    +<receiver android:name="ExampleAppWidgetProvider" >
    +    <intent-filter>
    +        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    +    </intent-filter>
    +    <meta-data android:name="android.appwidget.provider"
    +               android:resource="@xml/example_appwidget_info" />
    +</receiver>
    +
    -

    First, declare the {@link android.content.BroadcastReceiver} in your application's -AndroidManifest.xml file. +

    The <receiver> element requires the android:name +attribute, which specifies the {@link android.appwidget.AppWidgetProvider} used +by the App Widget.

    -{@sample frameworks/base/tests/appwidgets/AppWidgetHostTest/AndroidManifest.xml AppWidgetProvider} +

    The <intent-filter> element must include an <action> +element with the android:name attribute. This attribute specifies +that the {@link android.appwidget.AppWidgetProvider} accepts the {@link +android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE ACTION_APPWIDGET_UPDATE} broadcast. +This is the only broadcast that you must explicitly declare. The {@link android.appwidget.AppWidgetManager} +automatically sends all other App Widget broadcasts to the AppWidgetProvider as necessary.

    -

    -The <receiver> element has the following attributes: +

    The <meta-data> element specifies the +{@link android.appwidget.AppWidgetProviderInfo} resource and requires the +following attributes:

    - -

    -The <intent-filter> element tells the {@link android.content.pm.PackageManager} -that this {@link android.content.BroadcastReceiver} receives the {@link -android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE AppWidgetManager.ACTION_APPWIDGET_UPDATE} broadcast. -The widget manager will send other broadcasts directly to your widget provider as required. -It is only necessary to explicitly declare that you accept the {@link -android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE AppWidgetManager.ACTION_APPWIDGET_UPDATE} broadcast. - -

    -The <meta-data> element tells the widget manager which xml resource to -read to find the {@link android.appwidget.AppWidgetProviderInfo} for your widget provider. It has the following -attributes: -

    -

    Adding the AppWidgetProviderInfo meta-data

    +

    Adding the AppWidgetProviderInfo Metadata

    -

    For a widget, the values in the {@link android.appwidget.AppWidgetProviderInfo} structure are supplied -in an XML resource. In the example above, the xml resource is referenced with -android:resource="@xml/appwidget_info". That XML file would go in your application's -directory at res/xml/appwidget_info.xml. Here is a simple example. +

    The {@link android.appwidget.AppWidgetProviderInfo} defines the essential +qualities of an App Widget, such as its minimum layout dimensions, its initial layout resource, +how often to update the App Widget, and (optionally) a configuration Activity to launch at create-time. +Define the AppWidgetProviderInfo object in an XML resource using a single +<appwidget-provider> element and save it in the project's res/xml/ +folder.

    -{@sample frameworks/base/tests/appwidgets/AppWidgetHostTest/res/xml/appwidget_info.xml AppWidgetProviderInfo} +

    For example:

    -

    The attributes are as documented in the -{@link android.appwidget.AppWidgetProviderInfo} class. +

    +<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:minWidth="294dp" <!-- density-independent pixels -->
    +    android:minHeight="72dp"
    +    android:updatePeriodMillis="86400000" <!-- once per day -->
    +    android:initialLayout="@layout/example_appwidget"
    +    android:configure="com.example.android.ExampleAppWidgetConfigure" >
    +</appwidget-provider>
    +
    + +

    Here's a summary of the <appwidget-provider> attributes:

    + + +

    See the {@link android.appwidget.AppWidgetProviderInfo} class for more information on the +attributes accepted by the <appwidget-provider> element.

    -

    Using the AppWidgetProvider class

    +

    Creating the App Widget Layout

    -

    The AppWidgetProvider class is the easiest way to handle the widget provider intent broadcasts. -See the src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.java -sample class in ApiDemos for an example. +

    You must define an initial layout for your App Widget in XML and save it in the project's +res/layout/ directory. You can design your App Widget using the View objects listed +below, but before you begin designing your App Widget, please read and understand the +App Widget Design +Guidelines.

    -

    Keep in mind that since the the AppWidgetProvider is a BroadcastReceiver, -your process is not guaranteed to keep running after the callback methods return. See -Application Fundamentals > -Broadcast Receiver Lifecycle for more information. +

    Creating the App Widget layout is simple if you're +familiar with Declaring Layout in XML. +However, you must be aware that App Widget layouts are based on {@link android.widget.RemoteViews}, +which do not support every kind of layout or view widget.

    + +

    A RemoteViews object (and, consequently, an App Widget) can support the +following layout classes:

    + + + +

    And the following widget classes:

    + + +

    Descendants of these classes are not supported.

    +

    Using the AppWidgetProvider Class

    -

    AppWidget Configuration UI

    + -

    -Widget hosts have the ability to start a configuration activity when a widget is instantiated. -The activity should be declared as normal in AndroidManifest.xml, and it should be listed in -the AppWidgetProviderInfo XML file in the android:configure attribute. +

    The {@link android.appwidget.AppWidgetProvider} class extends BroadcastReceiver as a convenience +class to handle the App Widget broadcasts. The AppWidgetProvider receives only the event broadcasts that +are relevant to the App Widget, such as when the App Widget is updated, deleted, enabled, and disabled. +When these broadcast events occur, the AppWidgetProvider receives the following method calls:

    -

    The activity you specified will be launched with the {@link -android.appwidget.AppWidgetManager#ACTION_APPWIDGET_CONFIGURE} action. See the documentation for that -action for more info. +

    +
    {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[])}
    +
    This is called to update the App Widget at intervals defined by the updatePeriodMillis + attribute in the AppWidgetProviderInfo (see Adding the + AppWidgetProviderInfo Metadata above). This method is also called + when the user adds the App Widget, so it should perform the essential setup, + such as define event handlers for Views and start a temporary + {@link android.app.Service}, if necessary. However, if you have declared a configuration + Activity, this method is not called when the user adds the App Widget, + but is called for the subsequent updates. It is the responsibility of the + configuration Activity to perform the first update when configuration is done. + (See Creating an App Widget Configuration Activity below.)
    +
    {@link android.appwidget.AppWidgetProvider#onDeleted(Context,int[])}
    +
    This is called every time an App Widget is deleted from the App Widget host.
    +
    {@link android.appwidget.AppWidgetProvider#onEnabled(Context)}
    +
    This is called when an instance the App Widget is created for the first time. For example, if the user + adds two instances of your App Widget, this is only called the first time. + If you need to open a new database or perform other setup that only needs to occur once + for all App Widget instances, then this is a good place to do it.
    +
    {@link android.appwidget.AppWidgetProvider#onDisabled(Context)}
    +
    This is called when the last instance of your App Widget is deleted from the App Widget host. + This is where you should clean up any work done in + {@link android.appwidget.AppWidgetProvider#onEnabled(Context)}, + such as delete a temporary database.
    +
    {@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)}
    +
    This is called for every broadcast and before each of the above callback methods. + You normally don't need to implement this method because the default AppWidgetProvider + implementation filters all App Widget broadcasts and calls the above + methods as appropriate.
    +
    -

    See the src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.java -sample class in ApiDemos for an example. +

    Note: In Android 1.5, there is a known issue in which the +onDeleted() method will not be called when it should be. To work around this issue, +you can implement {@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent) +onReceive()} as described in this +Group post +to receive the onDeleted() callback. +

    + +

    The most important AppWidgetProvider callback is +{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) +onUpdated()} because it is called when each App Widget is added to a host (unless you use +a configuration Activity). If your App Widget accepts any +user interaction events, then you need to register the event handlers in this callback. +If your App Widget doesn't create temporary +files or databases, or perform other work that requires clean-up, then +{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) +onUpdated()} may be the only callback method you need to define. For example, if you want an App Widget +with a button that launches an Activity when clicked, you could use the following +implementation of AppWidgetProvider:

    + +
    +public class ExampleAppWidgetProvider extends AppWidgetProvider {
    +
    +    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    +        final int N = appWidgetIds.length;
    +
    +        // Perform this loop procedure for each App Widget that belongs to this provider
    +        for (int i=0; i<N; i++) {
    +            int appWidgetId = appWidgetIds[i];
    +
    +            // Create an Intent to launch ExampleActivity
    +            Intent intent = new Intent(context, ExampleActivity.class);
    +            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    +
    +            // Get the layout for the App Widget and attach an on-click listener to the button
    +            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
    +            views.setOnClickPendingIntent(R.id.button, pendingIntent);
    +
    +            // Tell the AppWidgetManager to perform an update on the current App Widget
    +            appWidgetManager.updateAppWidget(appWidgetId, views);
    +        }
    +    }
    +}
    +
    + +

    This AppWidgetProvider defines only the +{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) +onUpdated()} method for the purpose +of defining a {@link android.app.PendingIntent} that launches an {@link android.app.Activity} +and attaching it to the App Widget's button +with {@link android.widget.RemoteViews#setOnClickPendingIntent(int,PendingIntent)}. +Notice that it includes a loop that iterates through each entry in appWidgetIds, which +is an array of IDs that identify each App Widget created by this provider. +In this way, if the user creates more than one instance of the App Widget, then they are +all updated simultaneously. However, only one updatePeriodMillis schedule will be +managed for all instances of the App Widget. For example, if the update schedule is defined +to be every two hours, and a second instance +of the App Widget is added one hour after the first one, then they will both be updated +on the period defined by the first one and the second update period will be ignored +(they'll both be updated every two hours, not every hour).

    + +

    Note: Because the AppWidgetProvider is a BroadcastReceiver, +your process is not guaranteed to keep running after the callback methods return (see +Application Fundamentals > +Broadcast Receiver Lifecycle for more information). If your App Widget setup process can take several +seconds (perhaps while performing web requests) and you require that your process continues, +consider starting a {@link android.app.Service} +in the {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) +onUpdated()} method. From within the Service, you can perform your own updates to the App Widget +without worrying about the AppWidgetProvider closing down due to an +Application Not Responding +(ANR) error. See the +Wiktionary +sample's AppWidgetProvider for an example of an App Widget running a {@link android.app.Service}.

    + +

    Also see the +ExampleAppWidgetProvider.java sample class.

    - -

    AppWidget Broadcast Intents

    +

    Receiving App Widget broadcast Intents

    {@link android.appwidget.AppWidgetProvider} is just a convenience class. If you would like -to receive the widget broadcasts directly, you can. The four intents you need to care about are: +to receive the App Widget broadcasts directly, you can implement your own +{@link android.content.BroadcastReceiver} or override the +{@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)} callback. +The four Intents you need to care about are:

    -

    By way of example, the implementation of -{@link android.appwidget.AppWidgetProvider#onReceive} is quite simple:

    - -{@sample frameworks/base/core/java/android/appwidget/AppWidgetProvider.java onReceive} -

    AppWidget Hosts

    +

    Creating an App Widget Configuration Activity

    + +

    If you would like the user to configure settings when he or she adds a new App Widget, +you can create an App Widget configuration Activity. This {@link android.app.Activity} +will be automatically launched by the App Widget host and allows the user to configure +available settings for the App Widget at create-time, such as the App Widget color, size, +update period or other functionality settings.

    + +

    The configuration Activity should be declared as a normal Activity in the Android manifest file. +However, it will be launched by the App Widget host with the {@link +android.appwidget.AppWidgetManager#ACTION_APPWIDGET_CONFIGURE ACTION_APPWIDGET_CONFIGURE} action, +so the Activity needs to accept this Intent. For example:

    + +
    +<activity android:name=".ExampleAppWidgetConfigure">
    +    <intent-filter>
    +        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
    +    </intent-filter>
    +</activity>
    +
    + +

    Also, the Activity must be declared in the AppWidgetProviderInfo XML file, with the +android:configure attribute (see Adding +the AppWidgetProvierInfo Metadata above). For example, the configuration Activity +can be declared like this:

    + +
    +<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    +    ...
    +    android:configure="com.example.android.ExampleAppWidgetConfigure" 
    +    ... >
    +</appwidget-provider>
    +
    + +

    Notice that the Activity is declared with a fully-qualified namespace, because +it will be referenced from outside your package scope.

    + +

    That's all you need to get started with a configuration Activity. Now all you need is the actual +Activity. There are, however, two important things to remember when you implement the Activity:

    + + +

    See the code snippets in the following section for an example of how to return a result +from the configuration and update the App Widget.

    + + +

    Updating the App Widget from the configuration Activity

    + +

    When an App Widget uses a configuration Activity, it is the responsibility of the Activity +to update the App Widget when configuration is complete. +You can do so by requesting an update directly from the +{@link android.appwidget.AppWidgetManager}.

    + +

    Here's a summary of the procedure to properly update the App Widget and close +the configuration Activity:

    + +
      +
    1. First, get the App Widget ID from the Intent that launched the Activity: +
      +Intent intent = getIntent();
      +Bundle extras = intent.getExtras();
      +if (extras != null) {
      +    mAppWidgetId = extras.getInt(
      +            AppWidgetManager.EXTRA_APPWIDGET_ID, 
      +            AppWidgetManager.INVALID_APPWIDGET_ID);
      +}
      +
      +
    2. +
    3. Perform your App Widget configuration.
    4. +
    5. When the configuration is complete, get an instance of the AppWidgetManager by calling + {@link android.appwidget.AppWidgetManager#getInstance(Context)}: +
      +AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
      +
      +
    6. +
    7. Update the App Widget with a {@link android.widget.RemoteViews} layout by calling + {@link android.appwidget.AppWidgetManager#updateAppWidget(int,RemoteViews)}: +
      +RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
      +appWidgetManager.updateAppWidget(mAppWidgetId, views);
      +
      +
    8. +
    9. Finally, create the return Intent, set it with the Activity result, and finish the Activity:
    10. +
      +Intent resultValue = new Intent();
      +resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
      +setResult(RESULT_OK, resultValue);
      +finish();
      +
      + +
    + +

    Tip: When your configuration Activity first opens, set +the Activity result to RESULT_CANCELED. This way, if the user backs-out of the Activity before +reaching the end, the App Widget host is notified that the configuration was cancelled and the +App Widget will not be added.

    + +

    See the +ExampleAppWidgetConfigure.java sample class in ApiDemos for an example.

    + + -

    Widget hosts are the containers in which widgets can be placed. Most of the look and feel -details are left up to the widget hosts. For example, the home screen has one way of viewing -widgets, but the lock screen could also contain widgets, and it would have a different way of -adding, removing and otherwise managing widgets.

    -

    For more information on implementing your own widget host, see the -{@link android.appwidget.AppWidgetHost AppWidgetHost} class.

    diff --git a/docs/html/images/appwidget.png b/docs/html/images/appwidget.png new file mode 100644 index 0000000000000000000000000000000000000000..b72b80b1d332b305b9ef56ca88b40f82c15459bb GIT binary patch literal 17414 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 JPDHLkV1nt7(7gZv literal 0 HcmV?d00001