2011-12-31 16 views
5

Tôi có một dịch vụ và tôi muốn các dịch vụ quảng bá để cho phép nó như là thiết bị quản lý, cho đến bây giờ tôi đưa ra loại tương tác giao diện người dùng từ các dịch vụ nhưRun ý định DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN từ một dịch vụ

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

và nó hoạt động, nhưng với DevicePolicyManager tôi không thể tìm thấy cách:

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

không hoạt động: không quảng bá gì ngoài việc không bị sập. Nếu không có intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Nó chỉ đơn giản là sụp đổ vì mã này là bên trong một tread bên trong một dịch vụ. Ý tưởng?

+2

Xin chào, bạn đã bao giờ nhận được câu trả lời cho điều này chưa? –

Trả lời

2

Tôi vừa mới khắc phục sự cố như vậy cho chính mình.

Note, mà bạn cần phải đặt mã này bên mẹ trong Android manifest.xml 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> 

và nó hoạt động :)

+0

cha mẹ có nghĩa là hoạt động gọi là ý định? – CamHart

4

Lý do là trên mã của lớp Android DeviceAdminAdd bản thân :

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

Bạn nên cân nhắc sử dụng một hoạt động khác để gọi DevicePolicyManager.

+0

"Bạn nên cân nhắc sử dụng một hoạt động khác để gọi DevicePolicyManager." Đây là giải pháp làm việc duy nhất cho câu hỏi này. – Zeba

Các vấn đề liên quan