FC2ブログ

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android] ウィジェットでボタンを押下(Click)処理

ウィジェットを作っててボタン押下時の処理をお試ししてみたのでメモ。
期待通りの動作をしたが、非推奨メソッドを使ってるので、あまりよくないかも・・・


■AppWidgetProvider を継承したクラス
onUpdate() に以下の実装をして、ボタン押下を処理させるサービスを起動する。

--------------------------------------------
Intent serviceIntent = new Intent();
serviceIntent.setClassName(context.getPackageName(), context.getPackageName() + ".サービスのクラス名");
serviceIntent.setAction("サービス起動の初期処理アクションを示す文字列(任意)");
context.startService(serviceIntent);
--------------------------------------------


■Service を継承したクラス
onStart() に以下の実装をする。
※ただし、onStart() は非推奨

--------------------------------------------
AppWidgetManager manager = AppWidgetManager.getInstance(this);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.xxxxlayout);

if ("サービス起動の初期処理アクションを示す文字列(任意)".equals(intent.getAction())) {
// サービス起動時の初期処理

} else if ("ボタン押下時のアクション名称(任意の文字列)".equals(intent.getAction())) {
//ボタンが押下された場合の処理を記載する。
}

// 各ボタンにアクションを設定して、クリックイベントを拾えるようにする
Intent newintent;
PendingIntent pending;

newintent = new Intent();
newintent.setAction("ボタン押下時のアクション名称(任意の文字列)");
pending = PendingIntent.getService(this, 0, newintent, 0);
remoteViews.setOnClickPendingIntent(R.id.button1, pending);

// ウィジェットの更新
ComponentName widget = new ComponentName(this, AppWidgetProvider.class);
manager.updateAppWidget(widget, remoteViews);
--------------------------------------------


■AndroidManifest.xml
タグの中に以下のように、service を定義して、
でアクションを定義する。

--------------------------------------------
<service android:name=".サービスクラス名"
     android:exported="false">
  <intent-filter>
    <action android:name="XXX" />
  </intent-filter>
</service>
--------------------------------------------

※「XXX」にはアクションの名称(任意の文字列)を定義する



意外と簡単にできた。。。


コメントの投稿

非公開コメント

プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。