Android 通过onActivityResult获得设备管理员的响应是否合适
我正在尝试通过用户从激活设备管理员处获取响应。 如果用户按activate然后执行某些操作,或者如果用户按cancel,将弹出一个对话框,通知用户应该激活 我试着用 类内设备管理员 结果\u确定为-1,结果\u取消为0 但当我在调试模式下运行时,我发现无论用户按Cancel或Activate, resultCode始终为0 更新 好吧,我想我已经找到原因了。我在MainActivity的清单中使用了android:launchMode=singleInstance 这是获取设备管理员激活响应的正确方法吗?Android 通过onActivityResult获得设备管理员的响应是否合适,android,android-activity,Android,Android Activity,我正在尝试通过用户从激活设备管理员处获取响应。 如果用户按activate然后执行某些操作,或者如果用户按cancel,将弹出一个对话框,通知用户应该激活 我试着用 类内设备管理员 结果\u确定为-1,结果\u取消为0 但当我在调试模式下运行时,我发现无论用户按Cancel或Activate, resultCode始终为0 更新 好吧,我想我已经找到原因了。我在MainActivity的清单中使用了android:launchMode=singleInstance 这是获取设备管理员激活响应的正
或者我做错了什么?是的,没错,但您应该放置一个扩展DeviceAdminReceiver的类的实例: 在onAcitivityResult中: 可以找到完整的样本
只需确保在AndroidManifest.XML中声明接收方。是的,这是正确的,但您应该放置一个扩展DeviceAdminReceiver的类的实例: 在onAcitivityResult中: 可以找到完整的样本 只需确保在AndroidManifest.XML中声明接收方。最后 我想我已经找到了原因 我在MainActivity的清单中使用了android:launchMode=singleInstance 现在我使用android:taskAffinity。 现在似乎一切都好了。最后 我想我已经找到了原因 我在MainActivity的清单中使用了android:launchMode=singleInstance 现在我使用android:taskAffinity。
现在似乎一切都好了。我有一个receiver实例,需要在两个类中使用这些代码,因此,我将代码作为静态函数放入一个静态类中。但是,其中一个类工作正常,可以为activate获取-1,但其中一个始终为0。我有一个receiver实例,需要在两个类中使用这些代码,因此,我将代码作为静态函数放入一个静态类中。然而,其中一个类工作正常,可以得到-1进行激活,但其中一个总是得到0。发布任何与设备管理相关的代码,我们无法猜测添加了更多的代码。非常感谢。发布任何与设备管理相关的代码,我们猜不出会添加更多代码。非常感谢。我也遇到了一个问题,但是您从清单中删除该属性的提示很有帮助。谢谢我也遇到了一个问题,但是你从清单中删除该属性的提示很有帮助。谢谢
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);
}
}
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;
}
}
}
}
ComponentName mDeviceAdminSample = new ComponentName(v.getContext(), DeviceAdmin.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
activity.startActivityForResult(intent, DEVICE_ADMIN_REQUEST);
if (requestCode == DEVICE_ADMIN_REQUEST}
if(resultCode == RESULT_OK) {
// admin
} else {
// not admin
}
}