无法在 android studio 运行ning 服务中 运行 DevicePolicyManger (deviceManger)

Can not run DevicePolicyManger (deviceManger) inside running service in android studio

我的项目有一个 运行ning 后台服务 class。服务 class 执行某个操作,每 x 秒的时间段,它给出一个输出标志(True 或 False)。基于该标志,每当它为“真”时,我想调用 运行 DevicePolicyManger (deviceManger)。

但是,我收到的错误是设备管理器总是 returns“Null”,应用程序崩溃了。 当我 运行 DevicePolicyManger (deviceManger) 在 mainactivity class 上时,它工作正常。但这不是我的目标,我需要根据 flag 的输出重复地从 运行ning 服务 class 内部调用 DevicePolicyManger (deviceManger)。

这是服务代码

public class test extends Service{
 DevicePolicyManager deviceManger;
 ComponentName compName;
 public boolean active;
 Context mContext;
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

    // perform service task here and output a boolean flag (True or False).

   if(flag == True){// I want to call devicemanger from here every time I get "True".
     
  deviceManger = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
  compName = new ComponentName(mContext, DeviceAdmin.class);
  System.out.println("deviceManger   " + deviceManger);

   Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
   intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "some text.");
   mContext.startActivity(intent);

   active = deviceManger.isAdminActive(compName);
   System.out.println("active   " + active);

  if (active) {
     deviceManger.lockNow();
           }
         }
       
      }
   }

谁能帮我解决这个问题?

我终于使用“BroadcastReciever”解决了这个问题,这样每当服务 class 提供所需的输出时,我就会向主 activity 广播一个整数值(或者可以是一个标志)class 使用“意图”。使用“OnRecieve()”函数并执行“DeviceAdminManger”class.

在主 activity 上接收此整数

在役(零件代码):

int cnt = 1;// could be any integer value
Intent intent = new Intent();
intent.setAction(ACTION_UPDATE_CNT);
intent.putExtra(KEY_INT_FROM_SERVICE, cnt);
sendBroadcast(intent);

In Main Activity class(部分代码):

  private class MyLockReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(ServiceClass.ACTION_UPDATE_CNT)) {
            int int_from_service = intent.getIntExtra(SensorService_testing.KEY_INT_FROM_SERVICE, 0);
            System.out.println("Lock NOW!");
            deviceManger.lockNow();
        }
    }
}