Androidプログラマへの道 〜 Moonlight 明日香 〜 - AppWidgetから他のアプリを起動する
ホーム画面に配置したウィジェットから他のアプリを起動するには, ペンディングインテント(PendingIntent)クラスを利用する.

他のアプリ起動

  • Widget01.java
    • RemoteViewsのインスタンスを取得する.
    • Intentを使って起動するアプリを設定する.
   Intentからのアプリ起動の設定方法は, 他のアプリを起動する等を参照.
    • PendingIntent#getActivityメソッドで, PendingIntentのインスタンスを取得する.
    • RemoteViews#setOnClickPendingIntentメソッドで, ButtonクリックにPendingIntentを紐付ける.
    • appWidgetManager#updateAppWidgetメソッドで, ウィジェットを更新する.
package com.moonlight_aska.android.widget01;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.widget.RemoteViews;

public class Widget01 extends AppWidgetProvider {
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // TODO Auto-generated method stub
    Log.v("Widget", "onUdate");
    // RemoteVIewsのインスタンス取得
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
    // メール起動の仕組み
    Intent mailIntent = new Intent(Intent.ACTION_SEND);
    mailIntent.setType("plane/text");
    PendingIntent mailPending = PendingIntent.getActivity(context, 0, mailIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.mail_id, mailPending);
    // Web起動の仕組み
    Intent webIntent = new Intent(Intent.ACTION_VIEW);
    webIntent.setData(Uri.parse("http://www.google.com"));
    PendingIntent webPending = PendingIntent.getActivity(context, 0, webIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.web_id, webPending);
    // ウィジェットを更新
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
  }
}
  • res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  <Button android:id="@+id/mail_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/mail_label"
    />
  <Button android:id="@+id/web_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/web_label"
    />
</LinearLayout>
  • res/xml/widget.xml
ホーム画面用AppWidgetを作成する参照.
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:minHeight="72dip"
  android:minWidth="146dip"
  android:initialLayout="@layout/main"
  android:updatePeriodMillis="0"
  />

注) AndroidManifest.xmlは, ホーム画面用AppWidgetを作成するを参照.

動作例:

              Jump Webをクリック