后台服务不能正常工作

时间:2016-10-10 09:57:15

标签: java android service locking

我试图在android中实现服务来制作app locker。

我试图检查前台正在运行的活动以及它是否已锁定,将其转发到我的Locker活动。

我也在清单中添加了服务,但它根本不起作用。 这是代码`

    private static Timer timer = new Timer();
    public Boolean userAuth = false;
    private Context mContext;
    public String pActivity = "";

    public IBinder onBind(Intent arg0) {
        return null;
    }

    public void onCreate() {
        super.onCreate();
        mContext = this;
        startService();
    }

    private void startService() {
        timer.scheduleAtFixedRate(new mainTask(), 0, 500);
    }

    private class mainTask extends TimerTask {
        public void run() {
            toastHandler.sendEmptyMessage(0);
        }
    }

    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show();
    }

    private final Handler toastHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            String activityOnTop;

            ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);

            List<ActivityManager.RunningAppProcessInfo> tasks = manager.getRunningAppProcesses();
            //Getting the foreground activity name
            activityOnTop=tasks.get(0).processName;
            //Checking it against the app I need to lock
            if (activityOnTop.equalsIgnoreCase("com.droiddigger.techmanik")) {
                Intent lockIntent = new Intent(mContext, Lockscreen.class);
                lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(lockIntent);
            } else if(activityOnTop.equalsIgnoreCase("com.droiddigger.applocker")){

            }else{

            }
        }
    };

1 个答案:

答案 0 :(得分:0)

您必须启动该服务。它可以在Activity或BroadcastReceiver中完成。

startService(new Intent(this, UpdaterServiceManager.class));

例如:

public class MyActivity extends Activity {

    @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startService(new Intent(this, YourService.class));
        finish();
    }

}

修改

您始终会检索名为 tasks 的列表中的项目0。查看SDK文档,可以说没有指定列表顺序:https://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses()

  

返回RunningAppProcessInfo记录的列表,如果有,则返回null   没有正在运行的进程(它不会返回空列表)。 此列表   未指定订购。

您必须以其他方式获取当前可见的活动。我建议使用AccessibilityService