Question

public final static void lockDevice()
    {
        try
        {
            if (devicePolicyManager.isAdminActive(adminComponent))
            {
                devicePolicyManager.lockNow();
            }
        }
        catch (final Exception ex)
        {
            ...
        }
    }

Le code ci-dessus ne lève aucune exception et ne verrouille l'écran que pour les tablettes Motorola Xoom.(Homeycomb et Icecream Sandwitch) Le même code fonctionne parfaitement sur les autres tablettes Homeycomb et ICS.

J'ai cherché sur Google, mais je n'ai trouvé aucune solution.Des idées.....?

Était-ce utile?

La solution

Raisons possibles de ce problème

1) Je pense qu'il y a un problème avec le récepteur métadonnées dans votre AndroidManifest.xml

2) Vous n'avez pas ajouté la classe correcte (étendue avec DeviceAdminReceiver) soit à adminComponent OU à la propriété android:name du récepteur.

Après avoir passé beaucoup de temps là-dessus, j'ai créé le code.


Code pour l'activité principale

public class LockerTest extends Activity {
    protected static final int REQUEST_ENABLE = 0;
    DevicePolicyManager devicePolicyManager;
    ComponentName adminComponent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.btn);
        button.setOnClickListener(btnListener);

    }

    Button.OnClickListener btnListener = new Button.OnClickListener() {
        public void onClick(View v) {
            adminComponent = new ComponentName(LockerTest.this, Darclass.class);
            devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

            if (!devicePolicyManager.isAdminActive(adminComponent)) {

                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent);
                startActivityForResult(intent, REQUEST_ENABLE);
            } else {
                devicePolicyManager.lockNow();
            }

        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (REQUEST_ENABLE == requestCode) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

}


Créer une nouvelle classe - Darclass - code

import android.app.admin.DeviceAdminReceiver;

public class Darclass extends DeviceAdminReceiver{

}


Créez un dossier 'xml' en 'res'.Créez ensuite le fichier my_admin.xml dans le dossier 'xml'.Code pour mon_admin.xml.Notez que vous ajoutez ce récepteur après </activity> et avant </application>

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
    </uses-policies>
</device-admin>


Enfin, ajoutez le récepteur ci-dessous à votre AndroidManifest.xml

<receiver
            android:name=".Darclass"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/my_admin" />

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

Cela devrait fonctionner sur votre appareil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top