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

Данный код не вызывает никаких исключений и не блокирует экран только для тарелок motorola xoom. (Как для домашнего, так и для мороженого) Этот же код отлично работает на других планшетах Homeycomb и ICS.devicePolicyManager.lockNow() не работает для планшетов Motorola

Я googled, но не получил никакого решения. Есть идеи.....?

+0

Любопытно, что вы использовали USES_POLICY_FORCE_LOCK. Я уверен, что вы просто спрашивали? Я также читал, что locknow() прослушивается для устройств Motorola, но не о планшетах о DroidX. –

+0

Да, у меня есть разрешение 'USES_POLICY_FORCE_LOCK' –

ответ

21

Возможные причины этой проблемы

1) Я думаю, что есть какая-то проблема с мета-данных приемника в вашем AndroidManifest.xml

2) Вы не добавили правильный класс (расширен DeviceAdminReceiver) либо к adminComponent OR, либо к имени android: name получателя.

Проведя много времени на этом, я создал код.


Код для основной деятельности

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

} 


Создать новый класс - Darclass - код

import android.app.admin.DeviceAdminReceiver; 

public class Darclass extends DeviceAdminReceiver{ 

} 


Создать папку 'XML' в 'разрешении'. Затем создайте файл my_admin.xml в папке «xml». Код для my_admin.xml. Примечание добавить этот приемник после </activity> и перед </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> 


Наконец добавить ресивер данную ниже к вашему 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> 

Он должен работать на вашем устройстве.

+0

спасибо за это. но, как упоминалось в моем вопросе, мой код работает на всех других устройствах (протестированных на HTC 2.2, wildfire, Xperia 2.3, Galaxy Tab 3.1, 3.2), отличных от motorola 3.1+. У меня нет устройства motorola, но я тестировал ваш код на эмуляторах XOOM2 3.2, XOOM2ME 3.2, и он не работает :(Я ценю ваши усилия, хотя это возможно для сломанного API для Motorola, и я ищу Обходной вариант: вы тестировали свой код на Motorola Tablet? –

+0

У меня нет устройства Motorola. Но я думаю, что код будет работать на устройстве Motorola. У Emulators.a есть некоторые ограничения и может возникнуть проблема с выполнением кода, но код будет работать на Я уверен, что это не так. – Vivek

+0

Надеюсь, что вы говорите правильно, но, к сожалению, это не так. Несколько клиентов сообщили об этой проблеме, и единственное, что есть среди всех, это Motorola Tablet. –

 Смежные вопросы

  • Нет связанных вопросов^_^