我試圖在安卓模擬器上運行一個具有完全亭子模式的應用程式。 所以我寫了一個DeviceAdminReceiver:
public class AdminReceiver : DeviceAdminReceiver
{
public override void OnEnabled(Context context, Intent intent)。
{
base.OnEnabled(context, intent)。
Log.Info("設備管理。", "Enabled")。)
}
public override void OnDisabled(Context context。Intent intent)。
{
base.OnDisabled(context, intent)。
Log.Info("設備管理。", "Disabled">)。)
}
}
這里是MainActivity:
[Activity(Theme = "@style/Maui. SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[ ] { Intent.CategoryHome, Intent.CategoryDefault })]
public class MainActivity : MauiAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)。
{
base.OnCreate(s savedInstanceState)。
SetFullscreenFlags()。
var devicePolicyManager = (DevicePolicyManager)GetSystemService(Context.DevicePolicyService)。
var deviceAdminComponent = new ComponentName(this, Java.Lang.Class.FromType(typeof(AdminReceiver))。
var intent = new Intent(DevicePolicyManager.ActionAddDeviceAdmin)。
intent.PutExtra(DevicePolicyManager.ExtraDeviceAdmin, deviceAdminComponent)。
intent.PutExtra(DevicePolicyManager.ExtraAddExplanation, "設備管理員")。
StartActivity(intent);
devicePolicyManager.SetLockTaskPackages(deviceAdminComponent, new[ ] { PackageName })。
StartLockTask()。
}
private void SetFullscreenFlags()
{
Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen)。
if (Build.VERSION.SdkInt >= BuildVersionCodes.R)
{
Window.SetDecorFitsSystemWindows(true)。
var controller = Window.InsetsController;
if (controller is not null)
{
控制器.隱藏(WindowInsets.Type.StatusBars() | WindowInsets.Type.NavigationBars())。
}
}
else
{
Window.DecorView.SystemUiVisibility = (StatusBarVisibility)
(SystemUiFlags.LowProfile
| SystemUiFlags.Fullscreen
| SystemUiFlags.LayoutFullscreen
| SystemUiFlags.HideNavigation
| SystemUiFlags.LayoutHideNavigation
| SystemUiFlags.Immersive
| SystemUiFlags.ImmersiveSticky)。)
}
最后,這里是AndroidManifest.xml:
。<uses-sdk android: minSdkV版本="21" android:targetSdkV版本="30" />
<application android:allowBackup="true"/span> android: icon="@mipmap/appicon" android: roundIcon="@mipmap/appicon_round" android:supportedRtl="true">
<receiver>
android:name=".AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN"/span>>
<meta-data。
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/span> />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLED"/span> />/span>
</intent-filter>
</receiver>/span>
<receiver android:name=".BootReceiver"/span>>
<intent-filter>/span>
<action android:name="android.intent.action.PROFILE_PROVISIONING_COMPLETE"/>/span>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>/span>
</application>/span>
>
問題是MainActivity中的這一行拋出了這個例外:
devicePolicyManager.SetLockTaskPackages(deviceAdminComponent, new[] { PackageName }) 。
Java.Lang.SecurityException。'No active admin ComponentInfo{com.companyName.TestApp/rc6463b464086cdcaa12.AdminReceiver}'
我在resources/xml中已經有一個device-admin.xml,有一個device-admin標簽,它是否需要更多的配置?還是問題出在其他地方? 或者是我在灌輸兩個不同的管理接收器?
注意。 我已經完成了在模擬器上允許這個應用程式作為設備管理員的程式,并通過android debug bridge運行命令,將其設定為設備所有者:
dpm set-device-owner com.companyName.TestApp/.AdminReceiver
uj5u.com熱心網友回復:
你能確保你實際上是用類上的屬性注冊你的BroadcastReceiver,而不是手動修改AndroidManifest.xml。我認為讓你困惑的是,如果你不注冊接收器,它將被命名為<md5 sum>.AdminReceiver。然而,當你在AndroidManifest.xml中添加接收者為.AdminReceiver時,那么Android將把它膨脹為<package name>.AdminReciever。所以你的AdminReceiver將不會被呼叫。
所以請嘗試一下:
[BroadcastReceiver(
Name = "your.packagename.AdminReceiver"。
描述 = "@string/device_owner_description"。
Label = "My Device Admin Receiver"。
Permission = Manifest.Permission.BindDeviceAdmin)]
[MetaData("android.app.device_admin", Resource = "@xml/device_admin")/span>]
public class AdminReceiver : DeviceAdminReceiver
{
}
然后你應該洗掉清單中的條目。
如果您需要過濾特定的意圖,您也可以添加[IntentFilter]屬性來添加這些意圖,但對于設備管理來說,應該沒有必要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/317288.html
標籤:
上一篇:XamarinCarouselView錯誤。充實CarouselView類時出錯
下一篇:沒有找到模型工廠
