Я пытаюсь установить пользовательский 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: просто пустое действие с одной кнопкой.