我正在使用 Visual Studio 2017 来开发 Android 单视图应用程序。该应用程序应该是一个信息亭应用程序。我的目标是 API 21,在 Visual Studio(AVD 设备)提供的模拟器上。
我遇到的问题是我似乎无法制作有效的 DeviceAdminReceiver。我使用此链接作为我的指南:安卓信息亭模式该示例有效,但我的代码无效。该示例适用于 java。
这就是我的 DeviceAdminReceiver.cs 的方式:
[BroadcastReceiver(Permission = "android.permission.BIND_DEVICE_ADMIN")]
[MetaData("android.app.device_admin", Resource = "@xml/device_admin")]
[IntentFilter(new[] { "android.app.action.DEVICE_ADMIN_ENABLED", Intent.ActionMain})]
public class AdminReceiver : DeviceAdminReceiver
{
public override void OnEnabled(Context context, Intent intent)
{
base.OnEnabled(context, intent);
Toast.MakeText(context, Resource.String.AdminEnabled, ToastLength.Short).Show();
Common.BecomeHomeActivity(context);
}
public override void OnLockTaskModeEntering(Context context, Intent intent, string pkg)
{
Common.ShowToast(context, "[Kiosk Mode enabled]");
}
public override void OnLockTaskModeExiting(Context context, Intent intent)
{
Common.ShowToast(context, "[Kiosk Mode disabled]");
}
public override void OnDisabled(Context context, Intent intent)
{
Toast.MakeText(context, Resource.String.AdminDisabled, ToastLength.Short).Show();
}
}
这是我的 MainActivity.cs 中的代码:
protected override void OnCreate(Bundle bundle)
{
try
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
_deviceAdmin = new ComponentName(this, Java.Lang.Class.FromType(typeof(AdminReceiver)));
_devPolicyManager = (DevicePolicyManager)GetSystemService(Context.DevicePolicyService);
if (!_devPolicyManager.IsAdminActive(_deviceAdmin))
Common.ShowToast(this, "Admin is not active");
if (_devPolicyManager.IsDeviceOwnerApp(PackageName))
_devPolicyManager.SetLockTaskPackages(_deviceAdmin, new string[] { PackageName });
else
Common.ShowToast(this, "App is not Device Owner");
//}
}
catch (Exception ex)
{
}
}
我遇到的错误是,当我尝试将应用程序视为设备所有者时,出现错误Error: Unknown admin: ComponentInfo{atp.egg.app/atp.egg.app.AdminReceiver
。我猜这个错误与 AndroidManifest.xml 中的某些内容有关。我认为清单是根据类的属性自动生成的。我错了吗?
更新:这是我正在使用的行命令:adb -s model:Android_SDK_built_for_x86 shell dpm set-device-owner atp.egg.app/.AdminReceiver
这是我的 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="atp.egg.app" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="KioskApp"></application></manifest>
任何建议将不胜感激。即使是在 Xamarin.Android 中完成的具有正常功能的 DeviceAdminReceiver 的任何示例也是可以的。