मैं उपयोगकर्ता द्वारा डिवाइस व्यवस्थापक सक्रिय करने की प्रतिक्रिया प्राप्त करने की कोशिश कर रहा हूं। अगर उपयोगकर्ता प्रेस को सक्रिय करता है तो कुछ काम करता है या अगर उपयोगकर्ता एक संवाद को रद्द कर देगा, तो उपयोगकर्ता को सूचित करने के लिए पॉप होगा कि वह सक्रिय हो। मजबूत> <पूर्व> सार्वजनिक वर्ग DeviceAdmin {सार्वजनिक स्थिर अंतिम पूर्ण DEVICE_ADMIN_REQUEST = 9; सार्वजनिक स्थिर अंतिम अंत START_SERVICE = 8; निजी स्थिर DevicePolicyManager mDevicePolicyManager; निजी स्थिर घटक Name mComponentName; सार्वजनिक स्थिर DevicePolicyManager getDevicePolicyManager () {वापसी mDevicePolicyManager; } सार्वजनिक स्थिर शून्य सेटडिवाइस पॉलिसी प्रबंधक (अंतिम DevicePolicyManager डिवाइस पॉलिसी प्रबंधक) {mDevicePolicyManager = devicePolicyManager; } सार्वजनिक स्थिर घटक Name getComponentName () {return mComponentName; } सार्वजनिक स्थिर शून्य सेटकंपनीटनाम (अंतिम घटकनाम घटकनाम) {mComponentName = componentName; } सार्वजनिक स्थिर शून्य initDPM (अंतिम गतिविधि गतिविधि) {यदि (mDevicePolicyManager == शून्य) {setDevicePolicyManager ((DevicePolicyManager) गतिविधि .getSystemService (context.DEVICE_POLICY_SERVICE)); }} सार्वजनिक स्थिर & lt; T & gt; शून्य initComponent (अंतिम गतिविधि गतिविधि, अंतिम कक्षा & lt; T & gt; रिसीवर) {यदि (mComponentName == रिक्त) {setComponentName (नया घटक नाम (गतिविधि, रिसीवर)); }} सार्वजनिक स्थिर बूलीयन है DevisAdmin () {वापसी mDevicePolicyManager.isAdminActive (mComponentName); } सार्वजनिक स्थैतिक शून्य रजिस्टरडिवाइसआडमिन (अंतिम गतिविधि गतिविधि, अंतिम पूर्ण अनुरोध अनुरोध) {आशय इरादा = नए आशय (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); Intent.putExtra (DevicePolicyManager.EXTRA_DEVICE_ADMIN, getComponentName ()); Activity.startActivityForResult (आशय, requestCode); } सार्वजनिक स्थिर शून्य अपंजीकृतडिवाइसआडमिन () (यदि (mDevicePolicyManager.isAdminActive (mComponentName)) mDevicePolicyManager.removeActiveAdmin (mComponentName); }}
मुख्य गतिविधि
सार्वजनिक वर्ग LockIt गतिविधि का विस्तार {@Override सुरक्षित शून्य पर क्रिएट (बंडल सहेजा गया इन्स्टैंसस्टेट) {सुपर। onCreate (savedInstanceState); इस में(); यदि (! DeviceAdmin.isDeviceAdmin ()) DeviceAdmin.registerDeviceAdmin (यह, DeviceAdmin.DEVICE_ADMIN_REQUEST); अन्य // कुछ करो; } निजी शून्य इनिट () {DeviceAdmin.initDPM (यह); DeviceAdmin.initComponent (यह, LockItNowAdminReceiver.class); } @ ओवरराइड संरक्षित शून्य पर एक्टिवेटिव रिजल्ट (इंट अनुरोधकोड, इंट का परिणामकोड, इंटेंट डेटा) {यदि (requestcode == DeviceAdmin.DEVICE_ADMIN_REQUEST) {if (resultCode == RESULT_OK) {// कुछ करना; } और अगर (resultcode == RESULT_CANCELED) {// showAdminDialog; }}}} RESULT_OK है -1, RESULT_CANCELED है 0
लेकिन जब मैं डिबग में भाग गया मोड, मुझे पता चला कि कोई बात नहीं उपयोगकर्ता प्रेस रद्द या सक्रिय, resultCode हमेशा 0 है।
UPDATE
ओके, मुझे लगता है कि मुझे इसका कारण मिला है। मैंने android: launchMode = "single instance" में मुख्य गतिविधि का स्पष्ट रूप से उपयोग किया
क्या डिवाइस व्यवस्थापक सक्रियण की प्रतिक्रिया प्राप्त करने का यह एक उचित तरीका है? या फिर मैंने कुछ गलत किया है?
अंत में
मुझे लगता है कि मैंने पाया है कारण।
मैंने android: launchMode = "सिंगल इंस्टेंस" में मैनेफिट ऑफ मेनएक्टिविटी का उपयोग किया
अब मैं android: taskAffinity का उपयोग करता हूं। ऐसा लगता है कि अब सबकुछ ठीक है।
No comments:
Post a Comment