2011-12-31 10 views
5

Tengo un servicio y quiero promover el servicio a fin de que como administrador de dispositivos, hasta ahora puse en marcha este tipo de interacciones de interfaz de usuario del servicio comoRun DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN intención de un servicio

Intent intent2 = new Intent(); 
    intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent2.setAction(android.content.Intent.ACTION_VIEW); 
    intent2.setDataAndType(uri, "application/vnd.android.package-archive"); 
    context.startActivity(intent2); 

y funciona, pero con DevicePolicyManager no puedo encontrar el camino: el trabajo

 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); 
     intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "some text."); 
     context.startActivity(intent); 

does't: no promueven nada sino que además no chocar. Sin intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Simplemente se cuelga porque este código está dentro de una banda de rodadura dentro de un servicio. Ideas?

+2

Hola, ¿alguna vez obtuvieron una respuesta a esto? –

Respuesta

2

Acabo de solucionar este problema yo mismo.

Nota, que es necesario poner este código en el interior de los padres en el archivo de Android Manifest.xml:

<receiver 
     android:name=".ScreenLockerDeviceAdminReceiver" 
     android:permission="android.permission.BIND_DEVICE_ADMIN" > 
     <meta-data 
      android:name="android.app.device_admin" 
      android:resource="@xml/device_admin_policies" /> 

     <intent-filter> 
      <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     </intent-filter> 
    </receiver> 

y funciona :)

+0

principal significa la actividad que llama a la intención? – CamHart

4

La razón está en el código de la propia clase Android DeviceAdminAdd :

if ((getIntent().getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) { 
      Log.w(TAG, "Cannot start ADD_DEVICE_ADMIN as a new task"); 
      finish(); 
      return; 
     } 

Debería considerar usar otra actividad para llamar al DevicePolicyManager.

+0

"Debería considerar usar otra actividad para llamar a DevicePolicyManager". Esta es la única solución de trabajo para esta pregunta. – Zeba

Cuestiones relacionadas