2

Android Application クラスのサブクラスを含むライブラリがあります。サブクラスには、サービスを起動するメソッドが含まれています (これもライブラリ プロジェクトに含まれています)。

ホスト アプリケーションにライブラリを含めると、Activity Manager は、サービス インテントを開始できない (見つからない) と文句を言います。

コード構造は次のとおりです。

ライブラリのマニフェスト:

<service name="com.my.project.MyService" />

ライブラリ内のアプリケーション サブクラス:

Intent intent = new Intent(this, MyService.class);
startService(intent);

この問題は、ホスト アプリケーション マニフェストでサービスを再度定義することで解決できます。ただし、ライブラリを使用する開発者にこの要件を課すことは避けたいと思います。

私の質問は、ホスト マニフェストでライブラリ サービスを参照する必要を回避できますか?

4

2 に答える 2

1

言及する価値があるのは、現在の実装の時点では影響しませんが (私が正しく読んだ場合)、コンストラクターContextに渡すものに注意を払う必要があるということIntentです。

たとえばService、別の APK に移動することにした場合、そのサービスはクライアント アプリケーションで見つかりませんContext

代わりに代替Intentコンストラクターを使用できます。

Intent intent = new Intent("com.my.service.project", "com.my.service.project.MyService");

または、 の代わりにによってクライアント アプリケーションからトリガーされるプロジェクトに をBroadcastReceiver追加します。com.my.service.projectsendBroadcaststartService

于 2012-05-08T12:47:38.350 に答える
0

いいえ

少なくとも私が知る限り。アクティブにするには、マニフェストで宣言する必要があります。

プログラムで受信者を登録できます。あなたがグーグルアウトできること。

于 2012-05-08T12:26:37.810 に答える