如何确定应用程序是从服务中运行的

4

这是一个场景...

  1. 应用程序被打开。
  2. 用户点击按钮启动服务。
  3. 用户按home键,然后长按home键并清除任务列表中的应用程序。
  4. 尽管应用程序已关闭,服务仍在继续运行。

从正在运行的服务中如何确定该应用程序是否已被关闭?这种情况可能吗?


我认为你可以在服务取消和服务启动时显示Toast。 - Deepanker Chaudhary
我不确定你的意思是什么... 我不关心服务是否正在运行,我只想知道用户是否已经关闭了启动服务的应用程序? - FlashAsh80
我不确定,但如果你只是想让服务完成,那么你可以在警告框或吐司中显示一条消息。 - Deepanker Chaudhary
谢谢,但我不在意服务是否已经完成。我只关心当服务仍在运行时应用程序是否已关闭。 - FlashAsh80
3个回答

1

我想这就是你要找的内容:

 private boolean isAppRunning() {
    ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningTaskInfo task : manager.getRunningTasks(Integer.MAX_VALUE)) {
        if ("com.example.YourLauncherActivityClassFullName".equals(task.baseActivity.getClassName())) {
            return true;
        }
    }
    return false;
}

您需要提供的唯一信息是您应用程序的完整启动器活动类名称。

0

首先,您应该启动一个服务,该服务应该在特定时间内查看您的活动是否正在运行。为此,您可以使用Alarm Manager在一段时间后进行检查。

要检查您的活动是否正在运行,您应该使用:

ArrayList<String> runningactivities = new ArrayList<String>();

    ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); 

    List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 

        for (int i1 = 0; i1 < services.size(); i1++) { 
            runningactivities.add(0,services.get(i1).topActivity.toString());  
        } 

        if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){
            Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); 

        }

0
在你的主要(第一个)活动中:
公共静态布尔值isRunning;
@Override
public void onCreate(Bundle savedInstanceState) {

    isRunning = true;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
}
@Override

public void finish() {
    isRunning = false;
    super.finish();
}

在你的服务中检查isRunning标志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接