![](/img/trans.png)
[英]How to check if my application is running in android(not as a service)?
[英]Android check if service is running from another application
我正在編寫兩個相互配合的應用程序,一個收集數據(使用服務),另一個是自定義鍵盤,該鍵盤從服務中獲取數據並將其寫入所選的任何文本字段。 所有這些都工作正常,我唯一的問題是服務綁定。 現在,當他們調用bind時,該服務將從任何應用程序啟動。 那不是我想要的行為; 數據收集應用程序應該是唯一通過活動啟動/停止服務的應用程序,只有在服務正在運行時,鍵盤才會綁定。 我需要做的是在調用綁定之前檢查服務是否正在運行。 無論如何,我可以通過鍵盤應用程序檢查狀態嗎? 是否有某種鎖來表示服務的存在? 我現在發現的所有方法都需要從服務啟動位置開始的類名和上下文,而這些方法對我不起作用。
基本上以三種可能性結束,希望這對以后的人有所幫助。
方法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:
就像上面建議的bindService
一樣,將bindService
與標志0一起使用。唯一的問題是,無論方法是否連接,該方法將始終返回true,您將不得不尋找另一種方式來了解發生了什么(如果發生錯誤,您將不會收到服務句柄它失敗了)
方法3:
yosriz建議,使用SharedPreference
停止其他應用程序將檢查並知道服務狀態的狀態標志。
無法檢查服務以查看其是否已經啟動,Android服務旨在處理多個客戶端,並且如果bind方法尚未運行,則bind方法將創建該服務。
因此,您可以顯式啟動它,也可以使用bind()建立綁定服務連接,如果不存在,它將創建新的綁定。
但是,您可以通過多種方式實現此功能,例如,以某種共享的首選項保存服務“正在運行”狀態,並在綁定到服務之前檢查此首選項。 (SharedPreference可以在具有相同用戶標識的2個進程之間共享)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.