我试图让用户从激活设备管理的响应。 如果用户preSS激活然后做出头,或者如果用户preSS取消会弹出一个对话框,告知用户需要激活。
I am trying to get the response from activate device admin by user. if the user press activate then do somethings or if the user press cancel a dialog will pop to inform user should activate.
我尝试使用
在类的 DeviceAdmin
public class DeviceAdmin {
public static final int DEVICE_ADMIN_REQUEST = 9;
public static final int START_SERVICE = 8;
private static DevicePolicyManager mDevicePolicyManager;
private static ComponentName mComponentName;
public static DevicePolicyManager getDevicePolicyManager() {
return mDevicePolicyManager;
}
public static void setDevicePolicyManager(
final DevicePolicyManager devicePolicyManager) {
mDevicePolicyManager = devicePolicyManager;
}
public static ComponentName getComponentName() {
return mComponentName;
}
public static void setComponentName(final ComponentName componentName) {
mComponentName = componentName;
}
public static void initDPM(final Activity activity) {
if (mDevicePolicyManager == null) {
setDevicePolicyManager((DevicePolicyManager) activity
.getSystemService(Context.DEVICE_POLICY_SERVICE));
}
}
public static <T> void initComponent(final Activity activity,
final Class<T> reciever) {
if (mComponentName == null) {
setComponentName(new ComponentName(activity, reciever));
}
}
public static boolean isDeviceAdmin() {
return mDevicePolicyManager.isAdminActive(mComponentName);
}
public static void registerDeviceAdmin(final Activity activity,
final int requestCode) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
getComponentName());
activity.startActivityForResult(intent, requestCode);
}
public static void unregisterDeviceAdmin() {
if (mDevicePolicyManager.isAdminActive(mComponentName))
mDevicePolicyManager.removeActiveAdmin(mComponentName);
}
}
在 MainActivity
public class LockIt extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
if (!DeviceAdmin.isDeviceAdmin())
DeviceAdmin.registerDeviceAdmin(this,
DeviceAdmin.DEVICE_ADMIN_REQUEST);
else
// Do something;
}
private void init() {
DeviceAdmin.initDPM(this);
DeviceAdmin.initComponent(this, LockItNowAdminReceiver.class);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DeviceAdmin.DEVICE_ADMIN_REQUEST) {
if (resultCode == RESULT_OK) {
// do something;
} else if (resultCode == RESULT_CANCELED) {
// showAdminDialog;
}
}
}
}
RESULT_OK 是-1, RESULT_CANCELED 0
但是,当我跑在调试模式下,我发现,无论用户preSS取消或激活, 因此code始终为0。
But when I ran in debug mode, I found that no matter user press Cancel or Activate, resultCode is always 0.
更新
好吧,我想我已经找到了原因。我用安卓launchMode =singleInstance
在清单MainActivity的
OKAY, I think I have found the reason. I used android:launchMode="singleInstance"
in Manifest of MainActivity
做,这是正确的方式来获得设备管理员激活的反应? 还是我做错了什么?
Do this is a proper way to get the response of device admin activation? Or I have do something wrong?
最后
我想我已经找到了原因。
I think I have found the reason.
我用安卓launchMode =singleInstance
在MainActivity的清单
I used android:launchMode="singleInstance"
in Manifest of MainActivity
现在我用安卓taskAffinity
。
现在看来一切都还好吧。
Now I use android:taskAffinity
.
It seems everything okay now.