6

私はサービスを持っていて、デバイス管理者としてそれを有効にするためにサービスをプロモートしたいのですが、これまで私は次のようなサービスからこの種の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);

動作しません:何も宣伝しないだけでなく、クラッシュもしません。intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);このコードはサービス内のトレッド内にあるため、それなしでは単にクラッシュします。アイデア?

4

3 に答える 3

8

その理由は、AndroidDeviceAdminAddクラス自体のコードにあります。

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

別のアクティビティを使用してDevicePolicyManagerを呼び出すことを検討する必要があります。

于 2013-06-25T12:44:56.910 に答える
4

私は自分でそのような問題を修正しました。

このコードは、AndroidManifest.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>

そしてそれは動作します:)

于 2012-06-07T22:36:22.017 に答える
0

セキュリティ設定のデバイス管理UIをポップアップする必要もありません。これを実際に行う方法は次のとおりです。

Runtime.getRuntime("dpm set-device-admin --user 0 com.mydeviceadmin/.deviceAdminReceiver")  

Android開発者ガイド:デバイス管理の概要で説明されているように、レシーバーをマニフェストで定義する必要がある場合

android6.0でテスト済み

デビッド

于 2019-08-25T19:27:38.907 に答える