0

私のアプリケーションは、さまざまなフィルタリング パラメーターを指定してデータを検索しています。このデータは、複数のソース (つまり、インターネット上の複数のサイト) から取得されます。私は、他の開発者が独自のデータ ソースを実装できるようにしたいと考えています。そうすれば、私の側で何もしなくても、彼らはそれらを私のアプリケーションに「プラグイン」できるようになります。

それを達成するための最良の方法は何ですか?特に:

  1. 外部開発者は、自分の実装を私のプロセスに可視化するために何をすべきですか?
  2. そのような外部実装を見つけるにはどうすればよいですか?
  3. 発見したら、これらの各実装の識別子として何を使用できますか?
  4. 外部実装のさまざまな「メソッド」と通信する方法。

私の最善の推測は、サービスを使用することです:

  1. 外部開発者に、指定された URIでインテント フィルターを使用してサービスをセットアップしてもらいます。
  2. PackageManager #queryIntentServices メソッドを使用して、指定した URI に一致するすべてのサービスを一覧表示します。
  3. パッケージ名を識別子として使用して、そのパッケージで直接インテントを起動できるようにします。
  4. 外部の開発者は私のドキュメントで指定されたすべての意図に耳を傾け、適切に対応すると信じてください。PendingIntent または Messenger オブジェクトのいずれかを渡して、結果を取得します。

私はまだ試していませんが、私は Android の初心者です。これは適切な方法ですか?

4

1 に答える 1

1

外部開発者に、指定された URI を使用してインテント フィルターを使用してサービスをセットアップしてもらいます。

PackageManager#queryIntentServices メソッドを使用して、指定した URI に一致するすべてのサービスを一覧表示します。

「URI」が「アクション」を意味する場合、これは確かに 1 つのアプローチです。

パッケージ名を識別子として使用して、そのパッケージで直接インテントを起動できるようにします。

はい。

外部の開発者は私のドキュメントで指定されたすべての意図に耳を傾け、適切に対応すると信じてください。PendingIntent または Messenger オブジェクトのいずれかを渡して、結果を取得します。

それらはうまくいくでしょう。私は PendingIntent に傾倒します。

これは適切な方法ですか?

::肩をすくめる::

真実と美のように、「適切」は見る人の目にあります。

(そして、うまくいけば、そのビホルダーではありません-それらは厄介でした)

あなたのアプローチに本質的な問題はありません。上記の私のコメントを法として、私は同じことをするかもしれません。

いくつかの代替案:

  • 同じ戦略ですが、ホストがそれらにバインドされた AIDL とのバインド インターフェイスをサービスにエクスポートさせます (利点: より豊富な API、欠点: 特にホストがアクティビティである場合は、セットアップに大きな手間がかかります)

  • プラグインはContentProvidersであり、オーソリティの命名規則またはブートストラップ メソッドによって検出されます。

  • プラグインは実際にはブロードキャストを介して通信しますIntents(主なデータ フローが、プラグインからデータをプルするのではなく、プラグインがデータをプッシュする場合にうまく機能します)

于 2012-04-27T11:29:19.493 に答える