2012-05-14 2 views
2

Я не могу получить действие, которое позволяет пользователю предоставлять разрешение на использование приложения администратором устройства.Android: Администратор устройства: Запустите Device Admin From Service

Мой код выглядит следующим образом ...

ComponentName comp = new ComponentName(this, CustomReceiver.class); 

Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 

i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, comp); 
i.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Explanation"); 

startActivity(i); 

Приложение не врезаться/сообщить исключение. Что я могу делать неправильно?

+2

Немного поздно, но ... Вам нужно использовать startActivityForResult(), как предложено nitinreddy, но вы не можете сделать это из службы. Чтобы сделать это из службы, лучше всего начать прозрачную деятельность, запросить права администратора из этого действия, а затем закончить() эту активность. –

+0

http://stackoverflow.com/a/17297711/581159 это может вам помочь ... – Zeba

ответ

1

Что-то, как это будет делать

if (!mPolicy.isAdminActive()) { 

    Intent activateDeviceAdminIntent = 
     new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 

    activateDeviceAdminIntent.putExtra(
     DevicePolicyManager.EXTRA_DEVICE_ADMIN, 
     mPolicy.getPolicyAdmin()); 

    // It is good practice to include the optional explanation text to 
    // explain to user why the application is requesting to be a device 
    // administrator. The system will display this message on the activation 
    // screen. 
    activateDeviceAdminIntent.putExtra(
     DevicePolicyManager.EXTRA_ADD_EXPLANATION, 
     getResources().getString(R.string.device_admin_activation_message)); 

    startActivityForResult(activateDeviceAdminIntent, 
     REQ_ACTIVATE_DEVICE_ADMIN); 
} 

Может быть, вы не считая

mPolicy.getPolicyAdmin() 
+0

Привет, в первую очередь, большое спасибо за ответ. Что такое «getPolicyAdmin» член? Кажется, я не считаю, что это метод DevicePolicyManager? –

+1

Нет, это CustomReceiver компонент, который ссылается на класс deviceadmin? – nithinreddy

+0

Значение, которое расширяет DeviceAdminReceiver? Не могли бы вы поделиться с этим куском кода? Просто отредактируйте вышеупомянутый ответ. –

0

Вот наглядный пример того, как сделать это, (официальные документы here и here пропустить некоторые контекст)

//class that implements DeviceAdminReceiver, defined in the Manifest 
ComponentName deviceAdminCN = new ComponentName(context, DeviceAdminReceiverImpl.class) 

... 

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminCN); 
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "your explanation for the user here"); 
startActivityForResult(intent, YOUR_REQUEST_CODE); 

Here is the reference class used in the official sample app.

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