2017-02-14 83 views
0

我正在编写两个应用程序一起协作一个收集数据(使用服务),另一个是自定义键盘从服务获取数据并将它们写入任何文本字段选择。所有这一切都工作正常我唯一的问题是服务绑定;现在服务将在任何应用程序调用绑定时启动。这不是我想要的行为;数据收集应用程序应该是唯一通过活动开始/停止服务的应用程序,键盘只会在服务正在运行时绑定。我需要做的是在调用绑定之前检查服务是否正在运行。无论如何,我有从键盘应用程序检查状态吗?是否有某种锁定来指示服务的存在?我现在发现的所有方法都需要从服务启动的地方获取类名和上下文,这对我来说不起作用。Android检查服务是否从另一个应用程序运行

+0

它是2个独立的应用程序?不同的流程? – yosriz

+0

@yosriz是的,一个是键盘,另一个是服务+控制视图。 – TheBrash

+0

只需调用带有0个标志(最后一个参数)的'bindService',如果服务已经启动,你就会绑定到它,如果它没有启动,绑定将不会发生 – pskink

回答

1

基本上以三种可能性结束希望这有助于未来的其他人。

方法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以上建议使用bindService与标志0只与问题这是该方法将永远返回真实无论它是否连接或不,你必须找到另一种方式来知道发生了什么(如果失败,你将不会收到服务手柄)

方法3:

通过yosriz使用SharedPreference建议停止状态标志,其他应用程序将检查并知道服务的状态。

0

无法检查服务是否已经启动,Android服务旨在处理多个客户端,并且绑定方法会在未运行时创建服务。

因此,您可以显式启动它或使用bind()创建绑定服务连接,如果不存在,则会创建新连接。不过,您可以通过多种方式实现此功能,例如,在某些共享首选项中保存服务“正在运行”状态,并在绑定到服务之前检查此pref。 (SharedPreference可以在同一用户ID的2个进程之间共享)

相关问题