【问题标题】:Can not run DevicePolicyManger (deviceManger) inside running service in android studio无法在android studio的运行服务中运行DevicePolicyManger(deviceManger)
【发布时间】:2022-01-16 05:55:34
【问题描述】:

我的项目有一个正在运行的后台服务类。服务类执行某个操作,并且每个 x 秒的时间段,它都会给出一个输出标志(True 或 False)。基于该标志,只要它为“True”,我就想调用并运行 DevicePolicyManger (deviceManger)。

但是,我得到的错误是设备管理器总是返回“Null”并且应用程序崩溃。 当我在 mainactivity 类上运行 DevicePolicyManger (deviceManger) 时,它工作正常。但这不是我的目标,我需要根据 flag 的输出从正在运行的服务类内部反复调用 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();
           }
         }
       
      }
   }

谁能帮我解决这个问题?

【问题讨论】:

    标签: java android-studio android-service device-admin android-device-manager


    【解决方案1】:

    我终于使用“BroadcastReciever”解决了这个问题,这样每当服务类提供所需的输出时,我就使用“Intent”向主活动类广播一个整数值(或可以是一个标志)。使用“OnRecieve()”函数并执行“DeviceAdminManger”类在主活动上接收此整数。

    服务中(部分代码):

    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);
    

    在 Main Activity 类中(部分代码):

      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();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2021-06-16
      • 2016-09-20
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多