Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过onActivityResult获得设备管理员的响应是否合适_Android_Android Activity - Fatal编程技术网

Android 通过onActivityResult获得设备管理员的响应是否合适

Android 通过onActivityResult获得设备管理员的响应是否合适,android,android-activity,Android,Android Activity,我正在尝试通过用户从激活设备管理员处获取响应。 如果用户按activate然后执行某些操作,或者如果用户按cancel,将弹出一个对话框,通知用户应该激活 我试着用 类内设备管理员 结果\u确定为-1,结果\u取消为0 但当我在调试模式下运行时,我发现无论用户按Cancel或Activate, resultCode始终为0 更新 好吧,我想我已经找到原因了。我在MainActivity的清单中使用了android:launchMode=singleInstance 这是获取设备管理员激活响应的正

我正在尝试通过用户从激活设备管理员处获取响应。 如果用户按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
  }

}