2012-10-28 3 views
10

J'essaie d'ajouter un bouton à mon application pour le retirer de Device Administrator et j'utilise le code ci-dessous, mais mon application se bloque.Android: supprimer par programme mon application de Device Administrator?

Code: -

sur CLICK: -

{ 
    ComponentName devAdminReceiver = new ComponentName(this, DemoDeviceAdminReceiver.class); 
    DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
    dpm.removeActiveAdmin(devAdminReceiver); 
} 

Dans le code ci-dessus, DemoDeviceAdminReceiver est une classe qui étend DeviceAdminReceiver.

Erreur journal: -

10-28 15:26:09.295: E/AndroidRuntime(26101): FATAL EXCEPTION: main 
10-28 15:26:09.295: E/AndroidRuntime(26101): java.lang.IllegalArgumentException: Unknown admin: ComponentInfo{com.dragonnis.intellicover/com.dragonnis.intellicover.DemoDeviceAdminReceiver} 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.os.Parcel.readException(Parcel.java:1331) 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.os.Parcel.readException(Parcel.java:1281) 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.app.admin.IDevicePolicyManager$Stub$Proxy.removeActiveAdmin(IDevicePolicyManager.java:2940) 
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.app.admin.DevicePolicyManager.removeActiveAdmin(DevicePolicyManager.java:183) 

Répondre

14

Il est comme vous le faites:

DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
mDPM.removeActiveAdmin(mDeviceAdminReceiver); 

Mais vous devez ajouter ces filtres au récepteur AndroidManifest.xml:

<intent-filter> 
     <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" /> 
    </intent-filter> 


@Override 
public CharSequence onDisableRequested(Context context, Intent intent) { 
    return "Admin rights are beeing requested to be disabled for the app called: '" + context.getString(R.string.app_name) + "'."; 
} 
+0

Permettez-moi savoir si ça aide. – ViliusK

+0

Merci pour la réponse rapide. Les filtres d'intention sont déjà présents dans le fichier AndroidManifest.xml. L'administrateur de l'appareil est très bien activé, mais le fait d'essayer de le supprimer est toujours à l'origine du plantage. –

+0

Oh, réparé. Le problème était avec la classe DeviceAdminReceiver. J'utilisais une classe distincte pour activer l'administration de l'appareil, mais lorsque j'ai essayé de l'enlever, j'utilisais un DeviceAdminReceiver différent qui n'était même pas activé en tant qu'administrateur d'appareil. Que je suis bête. Merci de votre aide. –

Questions connexes