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

上面的代码不抛出任何异常,也没有它锁定为唯一的摩托罗拉XOOM平板电脑屏幕。 (Homeycomb和Icecream Sandwitch)相同的代码在其他Homeycomb和ICS平板电脑上完美工作。devicePolicyManager.lockNow()不工作摩托罗拉片

我使用Google搜索,但没有得到任何解决方案。有任何想法吗.....?

+0

只是好奇你使用USES_POLICY_FORCE_LOCK我相信你只是问了吗?我还读到了locknow()对motorola设备的窃听,但不是关于DroidX的平板电脑。 –

+0

是的,我有许可'USES_POLICY_FORCE_LOCK' –

回答

21

这个问题的可能原因

1)我认为有一些问题,在您的AndroidManifest.xml

2)您没有添加正确的类接收器的元数据(带有扩展DeviceAdminReceiver)传递给adminComponent或者传给接收者的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'。然后在'xml'文件夹中创建my_admin.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

谢谢你的努力。但是,正如我的问题所述,我的代码适用于除摩托罗拉3.1+以外的所有其他设备(在HTC 2.2,wildfire,Xperia 2.3,Galaxy Tab 3.1,3.2上测试)。我没有摩托罗拉设备,但在仿真器XOOM2 3.2,XOOM2ME 3.2上测试了你的代码,但它不起作用:(尽管我很欣赏你的努力,但这可能是摩托罗拉的一个破碎的API,我正在寻找解决方法:您是否在摩托罗拉平板电脑上测试过您的代码? –

+0

我没有摩托罗拉设备,但我认为这些代码可以在摩托罗拉设备上使用Emulators.has有一些限制,并且执行代码时可能会有问题,但代码可以在实际中使用设备,我很肯定aboit它 – Vivek

+0

我希望你说的是对的,但可悲的是它没有,多个客户报告过这个问题,唯一的共同点就是摩托罗拉平板电脑 –