java如何获取正在运行的应用程序名称并将其与安卓上数据库中记录的名称进行匹配?
我正在尝试构建防病毒应用程序。我在尝试使用运行时服务将正在运行的应用程序包名称与数据库中记录的名称进行匹配时遇到问题
这是我的服务:
import 安卓.app.*;
import 安卓.content.*;
import 安卓.database.*;
import 安卓.os.*;
import java.util.*;
import 安卓.widget.*;
import 安卓.util.*;
public class RuntimeSecurityService extends Service
{
String packagePublicName;
DatabaseManager db;
ActivityManager activityManager;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
// TODO: Implement this method
db = new DatabaseManager(getApplicationContext());
CheckRunningApps cra = new CheckRunningApps();
new Thread(cra).start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent p1)
{
// TODO: Implement this method
return null;
}
class CheckRunningApps implements Runnable
{
@Override
public void run()
{
Looper.prepare();
activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
String packName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
Cursor dataBase = db.getAllData();
while(dataBase.moveToNext())
{
packagePublicName = dataBase.getString(1);
if(dataBase.getString(1).equals(packName))
{
}
}
final List<ActivityManager.RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
for (ActivityManager.RunningServiceInfo runingServiceInfo : services)
{
if (runingServiceInfo.service.getPackageName().equals(packagePublicName))
{
}
}
}
}
}
还有这个数据库管理员。爪哇:
import 安卓.database.sqlite.*;
import 安卓.content.*;
import 安卓.database.*;
public class DatabaseManager extends SQLiteOpenHelper
{
public static final String DATABASE_NAME = "Virus.db";
public static final String TABLE_NAME = "Viruses";
public DatabaseManager(Context context)
{
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (ID INTEGER PRIMARY KEY, Name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int p2, int p3)
{
}
public boolean insertData(String name)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("Name", name);
long result = db.insert(TABLE_NAME, null, cv);
if(result==-1)
{
return false;
}
else
{
return true;
}
}
public Cursor getAllData()
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("Select * from " + TABLE_NAME,null);
return res;
}
}
这里的问题是运行时服务中的可运行类只运行一次。 我需要一个代码,运行这个过程,甚至不停止一秒钟。 将该进程放入while(true)会使应用程序使用过多内存并降低设备性能
谢谢
共 (0) 个答案