Предоставление QR-кода для полностью управляемого устройства, принадлежащего компании - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь установить пользовательский DPC на свой новый планшет с заводскими настройками, используя метод обеспечения QR-кода.Я создал JSON и преобразовал его в QR-код для сканирования.

Я могу отсканировать QR-код, и мое пользовательское приложение DPC успешно установлено.После чего показывается экран запуска моего устройства.Я ожидал, что мои приемники deviceadmin будут вызываться как onEnable, onprofileprovisioningcompleted.Я пытаюсь запустить свою деятельность из метода onprofileprovisingcompleted.

Я хочу запускать действие автоматически без вмешательства пользователя.Моя домашняя активность и deviceadminreceiver является частью приложения dpc. Я не могу понять, почему эти методы не вызываются.

Я добавил тосты и уведомления, которые так и не были выполнены.Пожалуйста, совет.

ОС на планшете есть: Nougat. Пожалуйста, найдите код ниже.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="fateh.com.my.fatehdpc">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

        </intent-filter>
    </activity>

    <receiver
        android:name=".MyDeviceAdminReceiver"
        android:label="DevicePolicyAdminReceiver"
        android:permission="android.permission.BIND_DEVICE_ADMIN"
        android:exported="true">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/device_admin" />

        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            <action android:name="android.app.action.PROFILE_PROVISIONING_COMPLETE"/>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.app.action.PROFILE_OWNER_CHANGED"/>
            <action android:name="android.app.action.DEVICE_OWNER_CHANGED"/>

        </intent-filter>
    </receiver>

    <receiver
        android:name=".BootReceiver"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

</application>

Файл класса MyDeviceAdminReceiver

public class MyDeviceAdminReceiver extends DeviceAdminReceiver
{
    public static final String ACTION_PASSWORD_REQUIREMENTS_CHANGED =
            "com.afwsamples.testdpc.policy.PASSWORD_REQUIREMENTS_CHANGED";

    void showToast(Context context, String msg) {

       // Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        showNotification(context,msg);
    }

    public void showNotification(Context context, String message) {


        // Create Notification using NotificationCompat.Builder
        NotificationCompat.Builder builder = new NotificationCompat.Builder(
                context)
                // Set Icon

                // Set Ticker Message
                .setTicker(message)
                // Set Title
                .setContentTitle("Testing")
                // Set Text
                .setContentText(message)
                // Add an Action Button below Notification

                // Set PendingIntent into Notification

                // Dismiss Notification
                .setAutoCancel(false);

        // Create Notification Manager
        NotificationManager notificationmanager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        // Build Notification with Notification Manager
        notificationmanager.notify(0, builder.build());

    }
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("Nadeem",
                "MyDevicePolicyReciever Received: " + intent.getAction());
        switch (intent.getAction()) {
            case ACTION_PASSWORD_REQUIREMENTS_CHANGED:
            case Intent.ACTION_BOOT_COMPLETED:
                Toast.makeText(context,"onReceive invoked ACTION_PASSWORD_REQUIREMENTS_CHANGED ACTION_BOOT_COMPLETED", Toast.LENGTH_LONG)
                        .show();
                break;
            case DevicePolicyManager.ACTION_PROFILE_OWNER_CHANGED:
                Toast.makeText(context,"onReceive invoked ACTION_PROFILE_OWNER_CHANGED", Toast.LENGTH_LONG)
                        .show();

                break;
            case DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED:
                Toast.makeText(context,"onReceive invoked ACTION_DEVICE_OWNER_CHANGED", Toast.LENGTH_LONG)
                        .show();

                break;
            default:
                Toast.makeText(context,"onReceive invoked ACTION_DEVICE_OWNER_CHANGED", Toast.LENGTH_LONG)
                        .show();
                super.onReceive(context, intent);
                break;
        }

    }

    @Override
    public void onEnabled(Context context, Intent intent) {

        UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
        long serialNumber = userManager.getSerialNumberForUser(Binder.getCallingUserHandle());
        showToast(context,"Device admin enabled in user with serial number: " + serialNumber);

    }

    @Override
    public void onDisabled(Context context, Intent intent) {

        showToast(context,"Device owner disabled");
    }



    @Override
    public void onProfileProvisioningComplete(Context context, Intent intent) {
        try
        {
            showToast(context,"onProfileProvisioningComplete");
            Intent launch = new Intent(context, MainActivity.class);
            launch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(launch);
        }
        catch (Exception e)
        {
            Log.d("nadeem", "onProfileProvisioningComplete Error " + e);
            showToast(context,"onProfileProvisioningComplete Error " + e);
        }

    }

    public static ComponentName getComponentName(Context context) {
        return new ComponentName(context.getApplicationContext(), MyDeviceAdminReceiver.class);
    }

}

MainActivity: просто пустое действие с одной кнопкой.

1 Ответ

0 голосов
/ 29 ноября 2018

У меня была такая же проблема, когда я использовал NFC-подготовку.Ошибка была в объявлении "приемника" в AndroidManifest.xml (атрибут exported = "false").

В объявлении "приемника" вы устанавливаете его как "экспорт" как exported = "true".Вы также добавляете следующие действия: "android.app.action.DEVICE_ADMIN_ENABLED" и "android.app.action.PROFILE_PROVISIONING_COMPLETE"

...