2013-10-02 1 views
0

Я работаю над блокировкой телефона от этого Reference. Хорошо работает на моей Samsung Tab 2. Но когда я запускаю тот же код на Nexus 2. Это не работает. Я разместил код ниже. Это журналы "DeviceAdminSample" "Admin enable FAILED!". Любая помощь будет оценена! Есть ли ограничение на Nexus?deviceManger.lockNow() не работает на некотором устройстве

onCreate() 
{ 
deviceManger = (DevicePolicyManager)getSystemService( 
        Context.DEVICE_POLICY_SERVICE); 
       activityManager = (ActivityManager)getSystemService( 
        Context.ACTIVITY_SERVICE); 
       compName = new ComponentName(this, MyAdmin.class); 
} 

private void EnableSetting() { 
     // TODO Auto-generated method stub 
     Intent intent = new Intent(DevicePolicyManager 
       .ACTION_ADD_DEVICE_ADMIN); 
         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, 
           compName); 
         intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, 
           "Additional text explaining why this needs to be added."); 
         startActivityForResult(intent, RESULT_ENABLE); 
    } 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case RESULT_ENABLE: 
       if (resultCode == Activity.RESULT_OK) { 
        Log.i("DeviceAdminSample", "Admin enabled!"); 
       } else { 
        Log.i("DeviceAdminSample", "Admin enable FAILED!"); 
       } 

     } 

Спасибо.

ответ

3

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

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. Примечание добавить этот приемник до и после

<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

Спасибо за ваш ответ. Я использую тот же самый Кодекс. Но его показ Log на '@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { if (REQUEST_ENABLE == requestCode) { super.onActivityResult (requestCode, resultCode, data); } } '.. происходит в этом состоянии' else' .. проверьте мой 'onActivityResult'. –

1

У меня была эта проблема. Это потому, что мой ... блок был вне моего блока в AndroidManifest.xml. Работал отлично, когда я переместил ... блок, как показано здесь:

 <activity 
      android:name=".Main" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name="MyDeviceAdminReceiver" 
      android:permission="android.permission.BIND_DEVICE_ADMIN"> 
      <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_xml" /> 
      <intent-filter> 
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
       <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED" /> 
       <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLED" /> 
      </intent-filter> 
     </receiver>