2012-03-22 17 views
2

私はAndroidアプリのプラグインを作成しています。私はできるだけ普遍的なものにしようとしています。これが私の問題です。私はプラグインを設計していますので、将来のすべてのアプリケーションでプラグインを簡単に実装できるようになります。プラグインには定期的に通知されるサービスが含まれているという問題があります。ユーザーが通知バーを開いて通知に触れると、もともとサービスを開始したアクティビティを開く必要があります。サービスを開始したアクティビティを確認するにはどうすればよいですか?

サービスはこのコードを使用して開始されます。

startService(new Intent(this, myService.class)); 

をし、サービスはこのコードを使用して通知を起動します:

現在
Intent notificationIntent = new Intent(this, myClass.class); 

myClass.classが通知にハードコードされています。つまり、何種類のアプリケーションを作成しても、このプラグインを使用すると、サービス「myClass」を起動するクラスの名前を指定する必要があります。

サービスを開始した元のアクティビティを一般的な方法で取得したいと考えています。

答えて

2

、このコードを試してみてください、私はそれを考え出しました。私はこれがちょっとハッキリしているのかどうかはわかりませんが、元の質問を投稿する前に私が知らなかったのは、あなたが汎用インテントを作成し、パッケージとクラスへのパスの文字列を使ってクラス情報を設定できるということです。これは私が使用したコードのコピーです。実際にサービスを開始する前に、サービスを開始する活動に

serviceIntent.putExtra("PackagePath",this.getPackageName()); 
    serviceIntent.putExtra("ClassPath", this.getPackageName() + "." + this.getLocalClassName()); 

そしてONSTARTイベントサービスの内部:

packagePath = intent.getExtras().getString("PackagePath"); 
    classPath = intent.getExtras().getString("ClassPath"); 

そして最後にサービスに通知を設定する:

Intent notificationIntent = new Intent(); 
    notificationIntent.setClassName(packagePath, classPath); 

2つに含まれる内容の例トリング変数:CommonsWareへ

packagePath = "myApp.main" 
    classPath = "myApp.main.mainActivity" 

感謝を意図経由Parceableを渡す方法の例を検索するので

3

サービスを開始した元のアクティビティを普及させたいと思います。

startService()で使用IntentIntentエキストラにご希望の情報を入れてください。サービスによって開始されたアクティビティを決定する方法はありません。多くの場合、アクティビティによってサービスを開始する必要がないためです。

+0

に私をもたらしたので、私は、クラスを置けばいいのかParceablesを使用してのパスに私を指しているためエクストラ?私は文字列、intsなどを行う方法を知っています...しかし、余分なクラスを渡すためのオプションはありません。 –

+0

@ LucasBailey:クラスは役に立たない。複数のアプリケーションが関わっていることを示しています。サービスは他のプロジェクトの 'Class'オブジェクトを持つことはできません。最善の答えは、 'Notification'に入れられる' PendingIntent'を余分に渡すことです。クライアントアクティビティは、それに関係するフラグなどの決定を行うことができます。 'PendingIntent'は' Parcelable'なので、 'Intent'余分に入ることができます。 – CommonsWare

+0

これは通知サービスの仕組みです。ユーザーが通知を選択したときに起動するクラスを指定する必要があります(例:Intent notificationIntent = new Intent(this、someActivity.class);私は保留中の意図を追い越すのを見ます。なぜ私はそれを考えなかったのか分からない。 –

0

おそらくputExtra()のいずれかの方法を使用できますか?

0

ことはわかりました

if(this instanceof Activity1) { 
    //is Acitivty 1 
} 
else if (this instanceof Acitivity2){ 
    //is Activity2 
} 
+0

新しい活動をするたびにプラグインを更新する必要はありませんか? –

関連する問題