0

特定の工場基本機能を備えたシステムを作成しようとしています。

サードパーティの開発者が独自のコードでこの機能を拡張できるようにする予定です。

これは、サードパーティのアプリが使用できるデータを受信する必要がある特定の状況で、ブロードキャストを開始することによって機能することを目的としています。

このシステムは機能しますが、バージョン 3.1 以降、BroadcastReceivers を有効にするには、ユーザーがアプリを実行する必要があるという問題があります。ユーザーがプラグインのアイコンでランチャーを詰まらせる必要がないように、ランチャー/デフォルトのアクティビティなしでこれらのプラグインを存在させたいと思っていました。追加のアクティビティは設定用に定義されますが、それはアプリ エコシステムから呼び出されます。

tl;dr: 新しくインストールされたアプリで、ユーザーの介入をできるだけ少なくして (理想的には、ランチャーに配置せずに) BroadcastReceiver を有効にするにはどうすればよいですか?

4

2 に答える 2

1

私の知る限り、Android 3.1以降の制限は暗黙的Intentsです。明示的--レシーバーのIntentsを設定した場所-- は問題なく動作するはずです。ComponentName

したがって、問題は次のようになります: 複数のプラグインと実際にどのように通信しているのですか?

誰もが受信できる単一のブロードキャストを送信することが意図されている場合、それは Android 3.1 の問題でつまずきます。Intent明示的な を介して UI からそのアクティビティの 1 つを開始したり、明示的なを介してそのコンポーネントの 1 つに直接ブロードキャストを送信したりするなど、サードパーティ アプリの一部のコンポーネントを自分で直接呼び出して有効にする必要がありますIntent

個別のプラグインにブロードキャストを送信することを意図している場合、プラグインを検出する何らかの方法がすでに用意されています (たとえば、追加されたパッケージを監視し、特定の を持つコンポーネントを探すなど<meta-data>)。その場合、Intent使用する明示的なものを派生させるように手配でき (たとえば、それは を持つコンポーネントです<meta-data>)、明示的にブロードキャストできるはずです。

Android 3.1 の「停止状態」の制限により明示的にIntents機能しないことがわかった場合は、さらに調査したいのでお知らせください。

于 2013-04-12T14:13:10.743 に答える
0

おお、この新しいセキュリティ機能を知りませんでした。残念なことに...

しかし、質問の詳細を理解したので、答えを提案しますが、うまくいくかどうかはわかりません。自分でテストする必要があります。

おそらく、アプリでPACKAGE_ADDED ブロードキャストを受信できます。このレシーバーで、この新しく追加されたパッケージについてパッケージマネージャーにクエリを実行し、ブロードキャスト用のインテントフィルターがあるかどうかを確認します。ある場合は、アプリを明示的に起動する必要がありますそのサードパーティアプリの一部のコンポーネントであるため、3.1 システムの制限によって「初期化」できます。

これは、サード パーティの開発者とのやり取りを変更して、アプリが常に起動できる標準コンポーネントを提供する必要があることを意味するかもしれませんが、実行可能な回避策のように思えます。

于 2013-04-12T14:16:05.213 に答える