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

El código anterior no arroja ninguna excepción ni bloquea la pantalla de las tabletas motorola xoom solamente. (Tanto Homeycomb como Icecream Sandwitch) El mismo código funciona perfectamente en otras tabletas Homeycomb e ICS.devicePolicyManager.lockNow() no funciona para Motorola Tablets

Busqué en Google, pero no encontré ninguna solución. Algunas ideas.....?

+0

Solo curiosidad usaste el USES_POLICY_FORCE_LOCK estoy seguro de que solo preguntaste? También he leído que el bloqueo de locknow() para los dispositivos de Motorola, pero que no tenía que ver con las tabletas, era sobre DroidX. –

+0

sí, tengo el permiso 'USES_POLICY_FORCE_LOCK' –

Respuesta

21

razones posibles para este problema

1) Creo que hay algún problema con meta-datos del receptor en su AndroidManifest.xml

2) Usted no ha agregado la clase correcta (ampliado con DeviceAdminReceiver) a adminComponent O a android: nombre de la propiedad del receptor.

Después de pasar mucho tiempo en esto, he creado el código.


Código de Actividad principal

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); 
     } 
    } 

} 


Crear una nueva clase - Darclass - código

import android.app.admin.DeviceAdminReceiver; 

public class Darclass extends DeviceAdminReceiver{ 

} 


Crear una carpeta 'xml' en 'res'. Luego crea mi archivo myadmin.xml en la carpeta 'xml'. Código para my_admin.xml. Nota agregar este receptor después de </activity> y antes </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> 


Por último añadir el receptor dado abajo a su 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> 

Se debe trabajar en su dispositivo.

+0

gracias por el esfuerzo. pero, como mencioné en mi pregunta, mi código funciona en todos los demás dispositivos (probados en HTC 2.2, wildfire, Xperia 2.3, Galaxy Tab 3.1, 3.2) distintos de motorola 3.1+. No tengo un dispositivo Motorola, pero probé tu código en los emuladores XOOM2 3.2, XOOM2ME 3.2, y no funciona :(. Aunque aprecio tu esfuerzo. Es posible que se haya roto una API para Motorola, y estoy buscando un solución alternativa. ¿Ha probado su código en la tableta Motorola? –

+0

No tengo un dispositivo Motorola. Pero creo que el código funcionará en el dispositivo Motorola. Emulators.has algunas restricciones y puede tener problemas para ejecutar el código pero el código funcionará en dispositivo. Estoy bastante seguro de que lo soporto. – Vivek

+0

espero que lo que diga sea correcto, pero lamentablemente no es así. Varios clientes han informado sobre este problema y lo único común entre todos ellos es la tableta Motorola –

Cuestiones relacionadas