它是一个正确的方式来获得通过onActivityResult从设备管理响应它是、设备管理、正确、方式

2023-09-12 05:21:42 作者:玫瑰少年

我试图让用户从激活设备管理的响应。 如果用户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.

 
精彩推荐
图片推荐