サービスを使用してデータを収集するアプリケーションと、サービスからデータを取得してテキストフィールドに書き込むカスタムキーボードの2つのアプリケーションを作成しています選択された。すべてこれはうまく動作している私の唯一の問題は、サービスバインディングです。今では、bindを呼び出すときに、どのアプリからでもサービスが開始されます。それは私が持っていたい行動ではありません。データ収集アプリケーションは、アクティビティを介してサービスを開始/停止する唯一のサービスである必要があります。サービスが実行されている場合、キーボードはバインドされません。私が行う必要があるのは、バインドを呼び出す前にサービスが実行されているかどうかをチェックすることです。とにかくキーボードアプリからのステータスを確認するために私はありますか?サービスの存在を知らせるロックがありますか?私が今見つけたのは、サービスが開始されたクラス名とコンテキストを必要とするメソッドで、それは私のためには機能しません。他のアプリケーションからサービスが実行されているかどうかを確認する
0
A
答えて
1
は基本的に3つの可能性で終了しました。
方法1:(方法2は良好であるが、私は、イベントと一緒に行ったもの)
public static boolean isServiceRunning(Context queryingContext) {
try {
ActivityManager manager = (ActivityManager) queryingContext.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.example.myservice".equals(service.service.getClassName()))
return true;
}
} catch (Exception ex) {
Toast.makeText(queryingContext, "Error checking service status", Toast.LENGTH_SHORT).show();
}
return false;
}
方法2:pskink等
フラグ0のみ問題ととともに使用bindService
上記で示唆これはメソッドが接続されているかどうかにかかわらず常にtrueを返します。何が起こったのかを知る別の方法を見つける必要があります(失敗した場合はサービスハンドルを受け取りません)
方法3:
他のアプリケーションは、サービスの状態を確認し、知っているステータスフラグを停止するyosriz使用SharedPreference
によって提案されました。
0
サービスは既に開始されているかどうか確認できません。Androidサービスは複数のクライアントを処理するように設計されています。
これを明示的に開始するか、存在しない場合は新しいものを作成するbind()とのバインドサービス接続を作成することができます。
しかし、この機能をさまざまな方法で実現することができます。たとえば、サービスが「実行中」の状態をいくつかの共有設定で保存し、サービスにバインドする前にチェックします。 (SharedPreferenceは同じユーザーIDの2つのプロセス間で共有できます)
関連する問題
- 1. 他のアプリからサービスが実行されているかどうかを確認する方法は?
- 2. アプリケーションがフォアグラウンドで実行されているかどうかの確認
- 3. 子パッケージが実行されているかどうかを確認してから実行するSQLタスク
- 4. サービスが実行されているかどうかを確認するためのきれいな方法
- 5. C#アプリケーションがデスクトップブリッジ(プロジェクトセンテニアル)でUWPアプリケーションとして実行されているかどうかを確認する
- 6. アプリケーションが実行中かどうかを確認する方法
- 7. スクリーンセーバーが実行されているかどうかを確認するには?
- 8. Gtk mainloopが実行されているかどうかを確認する
- 9. フルスクリーンアプリケーションが実行されているかどうかを確認するには?
- 10. プロセスが実行されているかどうかを確認するpowershellスクリプト
- 11. プロセスが実行されているかどうかを確認する
- 12. Android:経由でサービスが実行されているかどうかを確認してください。 bindService
- 13. Java - 別のJavaアプリケーションが実行されているかどうかを確認してください。
- 14. AppleScriptでアプリケーションが実行されているかどうかを確認する方法が速い
- 15. WCFサービスがホストで実行されているかどうかを確認する方法
- 16. サービスが32または64ビットモードで実行されているかどうかを確認する方法
- 17. サービスがインストールされているかどうかを確認する方法
- 18. Asp.net C#:他のスレッドがスレッド内で実行されているかどうかを確認します。
- 19. アプリケーションがFlutterで最初に実行されているかどうか確認してください
- 20. アプリケーションが既に実行されているかどうか確認してください
- 21. rubyスクリプトが既に実行されているかどうかを確認
- 22. メインアクティビティから初めてアプリが実行されているかどうかを確認する方法
- 23. 他のアプリケーションがビジー状態かどうかを確認してください
- 24. アプリケーションがバックグラウンドで実行されているかどうかを確認する方法
- 25. Silverlightアプリケーションがローカルで実行されているかどうかを確認する方法?
- 26. Java Web Startアプリケーションが実行されているかどうかをユーザーに確認するプロンプト?
- 27. メモ帳++が実行されているかどうかを確認する簡単なアプリケーション
- 28. 開始済みのサービスが既に実行されているかどうかを確認
- 29. Microsoft OMSから任意のサービス(SQL Serverサービスなど)が実行されているかどうかを確認する方法
- 30. 実行ファイルのパスを使用してWindowsサービスがインストールされているかどうかを確認するにはどうすればよいですか?
2つのアプリケーションは別ですか?異なるプロセスですか? – yosriz
@yosrizはい、1つはキーボード、もう1つはサービス+コントロールビューです。 – TheBrash
0フラグ(最後のパラメータ)で 'bindService'を呼び出すだけです。サービスが既に起動されている場合は、それが起動されていなければバインディングは起こりません – pskink