Запустите намерение DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN из службы - PullRequest
6 голосов
/ 31 декабря 2011

У меня есть сервис, и я хочу, чтобы сервис продвигал его как 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 Iне могу найти путь:

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

не работает: ничего не продвигать, но и не вылетать.Без intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Это просто сбой, потому что этот код находится внутри протектора внутри службы.Идеи?

Ответы [ 2 ]

5 голосов
/ 25 июня 2013

Причина в коде самого класса 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.

4 голосов
/ 08 июня 2012

Я только что исправил такую ​​проблему для себя.

Обратите внимание, что вам нужно поместить этот код в родительский файл 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>

и все работает :) 1006 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...