2012-04-27 7 views
0

サービスで制御できる単純なアプリケーションを作成しています。このアプリケーションを制御するために、サービスはそれに送ることができるコマンドを知っている必要がありますので、私は次のように、これらのコマンドのリストを提供するためのアプリケーションであるべきと思った。サポートされているインテントのリストを送信するにはどうすればよいですか?

  1. アプリケーションが二次的であってもよいですMY_ACTION_GET_COMMANDSインテントに応答するアクティビティ(したがって、"AndroidManifest.xml"ファイルにインテントフィルタを定義する必要があります)。
  2. サービスはstartActivityForResultメソッドを使用してこのタイプのインテントを送信できることを知っています。
  3. アプリケーションがこのタイプのインテントを受信すると、適切なアクティビティは、サポートされているコマンドのリスト(インテントのリスト)を送信することによって送信者に応答します。

サポートされているインテントのリストを送信するにはどうすればよいですか?

更新:アプリケーションとサービスは異なるパッケージになっています。

答えて

2

私はなぜこれらのインテントのアクティビティを表示する必要があるのか​​分かりません。本当のユーザーが見るものですか?

あなたが実際に聞いているすべてのインテントのリストを取得したい場合は、PackageManagerを使用できます。 PackageManagerを使用してPackageInfoを取得します。その後、そのアプリ内のすべての定義済み受信者をスキャンすることができます。

もう少し説明すれば、もっと助けてくれるかもしれません。

+0

_私はこれらのインテントのアクティビティを表示する必要がある理由を理解していません。実際のユーザが見ることができるものなのでしょうか?_サービスのユーザは、コマンドでサポートされている各インテントにコマンド(単純な文字列、たとえば "write"、 "save to file")を関連付けることができます。応用。アプリケーションはサービスから分離されています(別のパッケージの一部です)。このサービスには音声認識装置が含まれており、ユーザーはアプリケーションを制御するコマンドを発行できます。 – enzom83

+1

さて、それはPackageManagerを使用して(サービスアプリケーションからでもそれを行うことができます)、またはリモートアプリケーションからきれいなリスト(人が読める説明付き)を返すことです。コンテンツプロバイダ(これはかなり重いIMOですが、状態の変更を書きたい場合に便利かもしれません)を使用して、アクティビティを使用して生データをクエリすることもできます。 – EvilDuck

+0

'PackageInfo pi = pm.getPackageInfo(" org.example "、PackageManager.GET_RECEIVERS); (ActivityInfo ai:pi.receivers){ //インテントフィルタはどこにありますか? } ' – enzom83

1

子アクティビティのリストとしてサポートされているインテントを親に渡すことができます。

Intent intent = this.getIntent(); 
     ArrayList<String> a = new ArrayList<String>(); 
     a.add("com.customintent.INTENT_ONE"); 
     a.add("com.customintent.INTENT_TWO"); 
     intent.putStringArrayListExtra("list",a); 

     this.setResult(RESULT_OK, intent); 
関連する問題