2011-12-31 132 views
5

我有一個服務,我要服務的意圖DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN推廣,使之作爲設備管理員, 直到現在我推出這種UI交互從服務像運行從服務

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

和它的工作原理,但與DevicePolicyManager我找不到方式:

 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工作:不要促進什麼,但也不會崩潰。沒有intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);它只是崩潰,因爲這個代碼是在一個服務內的胎面。想法?

+2

嗨,你有沒有得到答案? – 2012-05-14 09:53:14

回答

2

我剛剛爲自己解決了這個問題。

注意,你需要把這個代碼中父在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> 

和工程:)

+0

父母是指調用意圖的活動? – CamHart 2017-04-11 07:50:59

4

的原因是在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; 
     } 

您應該考慮使用其他活動來調用DevicePolicyManager。

+0

「您應該考慮使用其他活動來調用DevicePolicyManager。」這是這個問題的唯一工作解決方案。 – Zeba 2013-10-22 05:59:39