2012-01-24 153 views
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

我希望你說的是對的,但可悲的是它沒有,多個客戶報告過這個問題,唯一的共同點就是摩托羅拉平板電腦 –