无法在 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();
}
}
}
我的项目有一个 运行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();
}
}
}