2011-05-10 8 views
0

ハロー!アンドロイド通知を使用してアプリケーションにデータを渡す正しい方法

通知に関するご質問があります。

受信した特定のコンテンツのSMSを解析するアプリケーションを作成したいとします。 smsが特定の内容を含んでいる場合、それは解析され、データが抽出されます。通知が作成され、表示されるはずです。ユーザーが通知を選択すると、抽出されたデータを使用してアプリケーションを呼び出す必要があります。アプリケーションが実行されていない場合は、起動する必要があります。すでに実行中の場合は、インスタンスを表示して情報を処理する必要があります。

これを解決するために、私は次のことを行いました: ブロードキャスト受信機は、SMSを聞いてそれらを解析します。私はプロセスをのonCreate(...)メソッドでインテントを呼び出す

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

Notification notification = new Notification(icon, tickerText, when); Bundle bundleNotification = creatingNotificationBundle(...); 

Intent notificationIntent = new Intent(Intent.ACTION_MAIN); notificationIntent.setClassName(...); notificationIntent.putExtras(bundleNotification); 

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify((int) System.currentTimeMillis(), notification); 

活性:私は、次のコードを使用するアプリケーションを起動します。これは、アプリケーションが実行されていないときに正常に動作します。実行中のインスタンスがすでに存在する場合、そのインスタンスが呼び出され、データは渡されません(または、正しいメソッドを上書きしない)。私はonResume()が呼び出されたのを見ました。しかし、このメソッドはパラメータとして意図を持っていません。この問題を解決する最良のアイデアは何ですか?

私はこの仕事を得るために(私の意見では)非常に汚い回避策をした:

  • 私は一時的な活動
  • を作成した私は、この新しい活動やセットを呼び出すこと以外は、上記と同じコードを実行しますフラグnotificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)とnotificationIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
  • このアクティビティは、先に解析されたデータを転送するブロードキャストとインテントの両方を最初に送信します。

このようにして、メインアプリケーションはデータを取得します。すでに実行中の場合は、ブロードキャストを受信して​​インテントとともに前面に表示され、実行されていない場合は、onCreate(...)メソッドでインテントからデータを受信します。 しかし、これはデータをリダイレクトして何も実行しないためにダミーのアクティビティを作成するにはかなり汚れているので、これはこの問題の正しい解決策ではないと思います。

ご意見やご提案は高く評価されます。

おかげ

答えて

1
おそらくオーバーライドしたい

Activity#onNewIntent(android.content.Intent):代わりに、活動の新しいインスタンスのアクティビティスタックの最上位で開始されながら活動は、立ち上げ直す

...、onNewIntent ()は、それを再起動するために使用されたインテントを持つ既存のインスタンスに対して呼び出されます。

関連する問題