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

위의 코드는 예외를 발생 시키거나 모토로라 xoom 태블릿에서만 화면을 잠글 수 없습니다. (Homeycomb와 Icecream Sandwitch 모두) 동일한 코드가 다른 Homeycomb 및 ICS 태블릿에서 완벽하게 작동합니다.Motorola 태블릿에서 devicePolicyManager.lockNow()가 작동하지 않습니다.

나는 봤지만 해결책을 얻지 못했습니다. 어떤 아이디어 .....? 이 문제에 대한

+0

그냥 궁금해서 USES_POLICY_FORCE_LOCK을 (를) 사용하셨습니까? 나는 또한 locknow()가 모토로라 장치에 대해 도청되었지만 DroidX에 관한 태블릿이 아니라는 것을 읽었습니다. –

+0

네, 노력을 해주셔서 감사합니다. USES_POLICY_FORCE_LOCK' –

답변

21

가능한 이유는

1) 나는로 확장 당신이 올바른 클래스를 추가하지 않은

2)의 AndroidManifest.xml에서 수신기의 메타 데이터 일부 문제가 (있다고 생각 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, 산불, Xperia 2.3, 갤럭시 탭 3.1, 3.2에서 테스트)에서 작동합니다. 저는 모토로라 장치가 없지만 에뮬레이터 XOOM2 3.2, XOOM2ME 3.2에 대한 코드를 테스트했는데 작동하지 않습니다. (.) 귀하의 노력에 감사드립니다. 이것은 모토로라의 깨진 API 일 수 있으며, 해결 방법 : Motorola Tablet에서 코드를 테스트 해 보셨습니까? –

+0

Motorola 장치가 없지만 Motorola 장치에서 작동하는 코드가 있습니다 .Emulators는 몇 가지 제한 사항이 있으며 코드 실행에 문제가있을 수 있지만 코드는 실제 작업 할 수 있습니다. 장치. 나는 그것을 확실히 aboit. – Vivek

+0

내가 옳다고 말하는 바란다.하지만 슬프게도. 여러 고객이이 문제를보고하고 그들 모두의 공통점은 모토로라 타블렛이다. –