>

장치 정책 관리자가 작동하도록하려고하는데 활성화하려고하면 문제가 발생합니다. Google은 많은 것을 이미 알고 있으며 그 오류에 대해 이미 공격적입니다.

10-05 10:39:07.147: WARN/DeviceAdminAdd(144): Unable to retrieve device policy ComponentInfo{test.devadmin/test.devadmin.DeviceAdmin$MyDeviceAdminReceiver}
   10-05 10:39:07.147: WARN/DeviceAdminAdd(144): android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{test.devadmin/test.devadmin.DeviceAdmin$MyDeviceAdminReceiver}

매니페스트 :

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DeviceAdmin" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>     
<activity android:name=".app.DeviceAdmin$Controller"
  android:label="@string/activity_sample_device_admin">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.SAMPLE_CODE" />
     </intent-filter>
</activity> 
<receiver android:name="MyDeviceAdminReceiver"
      android:label="@string/app_label"
      android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
           android:resource="@xml/device_admin" />
        <intent-filter>
           <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
  </receiver>
</application>
</manifest>

device_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>

활성화 방법

   public void enable() {
    if (!mDPM.isAdminActive(mDeviceAdmin)) {
        Intent intent = new Intent(
                DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
                mDeviceAdmin);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                "Additional text explaining why this needs to be added.");
        startActivityForResult(intent, REQUEST_ENABLE);
    } else {
        mDPM.lockNow();
    }

수신자 클래스는 기본적으로 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html

http : // rootfs .wordpress.com/2010/09/09/android-make-your-application-a-device-administrator/

도움이나 조언은 대단히 감사하겠습니다!


  • 답변 # 1

    리시버 이름 <receiver android:name="MyDeviceAdminReceiver" 확인

    . 를 추가하지 않은 것 같아  수신자 이름 앞에 :

    <receiver android:name=".MyDeviceAdminReceiver"
    
    

  • 답변 # 2

    DeviceAdmin java 파일을 다시 확인하면 확장하려는 수신자 이름이 android manifest.xml 파일에서 지정하는 것과 다릅니다. DeviveAdmin java 파일을 표시하지 않았을 때의 추측입니다.

  • 답변 # 3

    마지막 날이 문제로 어려움을 겪고 있습니다 ... 내 문제가 발생했습니다. 내 문제는 내 componentName 에 있었다 나는 다음과 같은 생성자를하고 있었다 :

    val adminName = ComponentName(this, ::DeviceAdminReceiver.javaClass)
    
    

    그리고 마침내 공개 생성자에 대한 경고를 받고 있음을 알았습니다. PackageManager.NameNotFoundException ...

    로의 빠른 이동
    val adminName = ComponentName("com.project.myApp", "com.project.myApp.DeviceAdminReceiver")
    
    

    모든 것이 즉시 작동했습니다.

관련 자료

  • 이전 html - 여러 부트 스트랩 열 크기를 사용하는 목적은 무엇입니까?
  • 다음 html - 수레만으로 H1 아래로 H2를 이동하는 방법