2011-12-31 16 views
5

Ho un servizio e voglio promuovere il servizio per attivarlo come Admin dispositivo, fino ad ora ho lanciato questo tipo di interazioni dell'interfaccia utente del servizio comeRun DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN intento da un servizio

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

e funziona, ma con DevicePolicyManager non riesco a trovare il modo: lavoro

 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: non promuovere nulla, ma anche non crash. Senza intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Si blocca semplicemente perché questo codice si trova all'interno di un battistrada all'interno di un servizio. Idee?

+2

Ciao, hai mai avuto una risposta a questo? –

risposta

2

Ho appena risolto il problema per me stesso.

Nota, che è necessario inserire questo codice all'interno genitore in Manifest.xml Android File:

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

e funziona :)

+0

genitore che significa l'attività che chiama l'intento? – CamHart

4

La ragione è sul codice della classe DeviceAdminAdd Android sé :

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

È consigliabile prendere in considerazione l'utilizzo di un'altra attività per chiamare DevicePolicyManager.

+0

"È necessario prendere in considerazione l'utilizzo di un'altra attività per chiamare DevicePolicyManager." Questa è l'unica soluzione funzionante per questa domanda. – Zeba