0

Я пытаюсь использовать API-интерфейс устройства в своем приложении.Экран управления устройством не открывается

Мой DeviceAdmin класс вызывающий это:

public class DeviceAdminCaller extends Activity { 
static final int activationCode = 47; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
    ComponentName deviceAdminComponent = new ComponentName(this, DeviceAdmin.class); 
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminComponent); 
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "We recommend you to enable this"); 
    startActivityForResult(intent, activationCode); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case activationCode: 
     if (resultCode == Activity.RESULT_OK) { 
      Log.i("DeviceAdminSample", "Administration enabled!"); 
     } else { 
      Log.i("DeviceAdminSample", "Administration enable FAILED!"); 
     } 
     return; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 
} 

И мой подкласс DeviceAdminReciever это:

public class DeviceAdmin extends DeviceAdminReceiver { 
@Override 
public void onEnabled(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    super.onEnabled(context, intent); 
    Log.i("Device Admin", "Enabled"); 
} 

@Override 
public String onDisableRequested(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    return "Admin disable Requested"; 
} 

@Override 
public void onDisabled(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    super.onDisabled(context, intent); 
    Log.i("Device Admin", "Disables"); 

} 

@Override 
public void onPasswordChanged(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    super.onPasswordChanged(context, intent); 
    Log.i("Device Admin", "Password Changed"); 
} 
} 

Часть манифеста, содержащего DeviceAdmin является:

<activity 
     android:name=".DeviceAdmin" 
     android:label="activity_sample_device_admin" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.SAMPLE_CODE" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".DeviceAdminCaller" 
     android:label="activity_caller_device_admin" > 
     <intent-filter> 
      <action android:name="android.intent.action.DEVICE_ADMIN_CALLER" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <!-- <category android:name="android.intent.category.SAMPLE_CODE" /> --> 
     </intent-filter> 
    </activity> 

    <receiver 
     android:name=".DeviceAdmin" 
     android:permission="android.permission.BIND_DEVICE_ADMIN" > 
     <meta-data 
      android:name="android.app.device_admin_sample" 
      android:resource="@xml/device_admin_sample" /> 

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

Выход LogCat: Administration enable FAILED!

Что я делаю неправильно? Сегодня у меня есть проект. Любая помощь будет оценена по достоинству. :)

ответ

0

Что я делаю неправильно?

Вы звоните startActivityForResult(), за действие Intent, которое его не поддерживает. В таких случаях вы всегда вернуться RESULT_CANCELLED.

+0

Спасибо за помощь :) Должен ли я просто вызвать StartActivity (намерение) ???? Будет ли это тогда? Это единственная проблема. – David

+0

@arnavbhartiya: «Должен ли я просто вызвать StartActivity (намерение)?» - вы можете также, так как 'startActivityForResult()' не даст вам полезного результата. «Так будет?» - Я не понимаю ваш вопрос, извините. Если это помогает, [здесь пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/DeviceAdmin/LockMeNow) из [моей книги] (https://commonsware.com/Android) который демонстрирует внедрение администрирования устройства, включая использование 'ACTION_ADD_DEVICE_ADMIN'. – CommonsWare

+0

Я попробовал StartActivity (намерение), но экран DeviceAdmin все еще не запускается. Спасибо – David

Смежные вопросы