Java 我想检查正在使用服务运行的活动

Java 我想检查正在使用服务运行的活动,java,android,Java,Android,我想检查哪个应用程序当前正在运行,如果它匹配它显示消息。 这是我的服务代码 public class MyService extends Service{ Context context; ActivityManager am ; List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo; Dbheltool db; String packname; String key; HashMap<Strin

我想检查哪个应用程序当前正在运行,如果它匹配它显示消息。 这是我的服务代码

public class MyService extends Service{

Context context;
ActivityManager am ;
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo;
Dbheltool db;
String packname;
String key;

HashMap<String, String> list;
public MyService(Context context) {
    // TODO Auto-generated constructor stub4
    this.context=context;
    db=new Dbheltool(context);
}


@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    Toast.makeText(this, "The new Service was Created", Toast.LENGTH_LONG).show();

    am = (ActivityManager) getSystemService(context.ACTIVITY_SERVICE);
    runningAppProcessInfo = am
            .getRunningAppProcesses();
    try{
        db.open();
        list=(HashMap)db.getPackage();
        db.close();


    }catch (java.sql.SQLException e) {
        // TODO Auto-generated catch block
        Toast.makeText(context, "Exception", Toast.LENGTH_SHORT);
    }

}
@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
    Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();
    if(isThisApplicationRunning(context)){
        Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show();
    }




}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}

public boolean isThisApplicationRunning(final Context context) {

    for (final RunningAppProcessInfo app : runningAppProcessInfo) {
        try{
            if(list.get(app.processName.toString()).equals(app.processName.toString())) {
                return true
            }
        }
        catch(NullPointerException e){

        }
    }
    return false;
}
公共类MyService扩展服务{
语境;
活动管理器am;
列出runningAppProcessInfo;
Dbheltool数据库;
串包;
字符串键;
HashMap列表;
公共MyService(上下文){
//TODO自动生成构造函数stub4
this.context=context;
db=新的Dbheltool(上下文);
}
@凌驾
公共IBinder onBind(意向){
//TODO自动生成的方法存根
返回null;
}
@凌驾
public void onCreate(){
//TODO自动生成的方法存根
super.onCreate();
Toast.makeText(这是“新服务已创建”,Toast.LENGTH_LONG.show();
am=(ActivityManager)getSystemService(context.ACTIVITY_服务);
runningAppProcessInfo=am
.getRunningAppProcesses();
试一试{
db.open();
list=(HashMap)db.getPackage();
db.close();
}catch(java.sql.sqle){
//TODO自动生成的捕捉块
Toast.makeText(上下文,“异常”,Toast.LENGTH\u SHORT);
}
}
@凌驾
公共无效启动(Intent Intent,int startId){
//TODO自动生成的方法存根
super.onStart(intent,startId);
Toast.makeText(此“服务已启动”,Toast.LENGTH_LONG).show();
if(isThisApplicationRunning(上下文)){
Toast.makeText(上下文,“Success”,Toast.LENGTH_SHORT).show();
}
}
@凌驾
公共空间{
//TODO自动生成的方法存根
super.ondestory();
}
公共布尔值isThisApplicationRunning(最终上下文){
用于(最终运行AppProcessInfo应用程序:运行AppProcessInfo){
试一试{
if(list.get(app.processName.toString()).equals(app.processName.toString())){
返回真值
}
}
捕获(NullPointerException e){
}
}
返回false;
}
}

当我运行此应用程序时,它会失败并给出Nullpointer异常和服务停止。。。请帮我怎么做。
我的服务的目标是……“我的服务正在后台运行,并检查用户运行的应用程序。当用户单击任何应用程序时。服务检查应用程序包,如果其查找Hashmap对象的键和值与当前运行的应用程序的packagename的字符串匹配,则它将显示toast”

空指针看起来像来自您的行:

   if (list.get(app.processName).equals(app.processName)) {
您的比较语句似乎在比较一个不存在的值

请看Kkudi的回答:


它可能会帮助您构建方法。

您可以深入了解返回错误的更多信息。是的,我知道它会在循环中出现异常,我捕捉到异常,但它没有给出我想要的,并且在服务结束时停止。是的,我将应用程序的包名作为键放在“列表”中。它保存在我的sqlite数据库中,并返回hashmap对象。。。像这样的数据存储…list.put(“com.example.app”,“appname”)。是否尝试了不带.toString()的if语句?因为它们本质上都应该是字符串,对吗?是的,如果语句中没有.toString(),我会检查它