2012-11-14 11 views
5

これは間違った方法ですが、自分のアプリ内でAndroid AppWidgetのクリックイベントに応答してアクティビティを開始したいと考えています。当時私はPendingIntentを設定しましたが、クリックしたときに起動したい別のIntentがあります。私onStartCommandは、この行を使用しています。別のインテント内にインテントを送信する

final Intent mLaunchIntent = (Intent) intent.getParcelableExtra(Widget.EXTRA_INTENT); 

私は以前、私はこのラインを持っているsetOnClickPendingIntentを呼び出すとき:

mSendingIntent.putExtra(Widget.EXTRA_INTENT, (Parcelable) mLaunchIntent); 

をのでmLaunchIntentは、最初の行が大量に不足している、両方のラインで有効Intentであってものデータ。 Intentが無効であるため、startActivityを呼び出すと失敗します。

私はそれが可能であれば不思議、そしてどのようにしていますが、その方法の簡単なは次の1 Intentからエキストラを追加するため、厳密putExtrasを呼び出さずに、別のIntentの内部Intentを送信します。これらの2つを別々にして、簡単にアクセスできるようにしたいと思います。

答えて

1

インテントを解析するのにserviceを使用できませんか?

+0

私はサービスを使用していますが、そのサービスはインテント(この場合は「mSendingIntent」)で呼び出されます。私は、そのインテントの横に 'mLaunchIntent'を渡して、clickイベントがアクティビティを起動するようにする必要があります。 – Tom

1

インテント/オブジェクトをソースからデスティネーションに、またはその逆に渡す方法はいくつかあります。バンドルやエクストラを使わずにこれを行う方法の1つは、変数(getterとsetter)を持つ通常のクラスメソッドに頼ることです。メソッドを使用してオブジェクトを渡します。これを行う別の方法は、クラス変数の使用です。例:

+0

それは...一つの解決策です。しかし、それは私のケースではいくつかの問題のために失敗します。 1つは、ユーザーが2つのウィジェットを順番にクリックした場合です。グローバル変数を変更したり、ある種のグローバルキューを設定したりする必要はありません。また、ServiceとBroadcastReceiverは異なるスレッドで動作します。競争条件によって、これは非常に難しい解決策になります。 – Tom

7

実際にはわかりましたが、解決方法は非常に簡単でした。 mLaunchIntentParcelableにキャストしないでください。そうしないとデータが失われます。私は別のIntentを通じてIntentを送信するために必要なことすべてだった

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent); 

+0

実際に動作しますか?あなたはそれをテストしましたか? –

+0

'Widget.EXTRA_INTENT'の代わりに' Intent.EXTRA_INTENT'があるべきです – GreenRobo

+0

あなたは、インテントを取得してインテントオブジェクトに渡す方法を教えてください – JSONParser

関連する問題