Xamarin | Android | COSU错误

链接

我正在尝试创建COSU设备。这将是由我公司出售的硬件,该硬件运行由我们开发的单个应用程序。我浏览了许多教程,试图为此建立概念证明。

我目前有以下。

在我的AndroidManaifest.xml中

后来...

<application android:allowBackup="true" android:label="@string/app_name" android:keepScreenOn="true" >
    <receiver   android:name="DeviceAdmin"
                android:label="@string/sample_device_admin"
                android:description="@string/sample_device_admin_description"
                android:permission="android.permission.BIND_DEVICE_ADMIN">
        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
        <device-admin>
            <uses-policies>
                <limit-password />
                <watch-login />
                <reset-password />
                <force-lock />
                <wipe-data />
            </uses-policies>
        </device-admin>
    </receiver>
    <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</application>

在device_admin_receiver.xml中

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
    </uses-policies>
</device-admin>

DeviceAdmin.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.App.Admin;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace CB.App
{
    public class DeviceAdmin : DeviceAdminReceiver
    {

    }
}

最后是MainActivity.cs的OnCreate

protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Window.DecorView.SystemUiVisibility = (StatusBarVisibility)flags;

        // Setup the collection and register implementations
        IServiceCollection coll = new ServiceCollection();
        RegisterDependencies(coll);

        // Build the global services
        ServiceRegistrationHelper.RegisterCoreServices(coll);

        // Register the provide with the GlobalServices
        GlobalServices.RegisterServiceProvider(coll.BuildServiceProvider(new ServiceProviderOptions()));

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager)this.GetSystemService(Activity.DevicePolicyService);
        // get this app package name
        ComponentName mDPM = new ComponentName(this, typeof(DeviceAdmin).Name);

        if( myDevicePolicyManager.IsDeviceOwnerApp(this.PackageName))
        {
            //myDevicePolicyManager.ClearDeviceOwnerApp(this.PackageName);

            String[] packages = { this.PackageName };
            myDevicePolicyManager.SetLockTaskPackages(mDPM, packages);
            StartLockTask();
            SetUpClock();
            DisplayHome();
        }
        else
        {
            Toast.MakeText(this.ApplicationContext, "Not Owner", ToastLength.Long).Show();
        }
    }

在ADB Shell中,我运行了命令dpm set-device-owner com.companyname.productname / .DeviceAdmin并收到成功:设备所有者已设置为package componentinfo {com.companyname.productname / com.companyname.productname.DeviceAdmin}主动管理集到组件{com.companyname.productname / com.companyname.productename.DeviceAdmin}

它可以构建和部署,但是当它到达生产线时

myDevicePolicyManager.SetLockTaskPackages(mDPM, packages);

它引发错误Java.Lang.SecurityException:没有活动的管理员ComponentInfo(com.lathem.cumberland / DeviceAdmin

我想念什么?

寿司宿醉

<device-admin>从中删除该部分receiver,应通过单独的xml资源引用该meta-data部分,或者通过在接收者的清单部分中部分进行硬编码或通过类属性来进行引用:

[BroadcastReceiver(
    Name = "com.sushihangover.cosu.DeviceAdminReceiver", 
    Label = "StackOverflow",
    Permission = "android.permission.BIND_DEVICE_ADMIN",
    Exported = true
)]
[MetaData("android.app.device_admin", Resource = "@xml/device_admin_receiver")]
[IntentFilter(new[] { 
    "android.intent.action.DEVICE_ADMIN_ENABLE", 
    "android.intent.action.PROFILE_PROVISIONING_COMPLETE", 
    "android.intent.action.BOOT_COMPLETED" 
})]
public class MyDeviceAdminReceiver : DeviceAdminReceiver {}

使用Java类名称,而不是C#名称:

ComponentName mDPM = new ComponentName(this, Java.Lang.Class.FromType(typeof(DeviceAdminReceiver)));

注意:根据我DeviceAdminReceiver对子类的Java名称使用dpm set-device-owner将为:

adb shell dpm set-device-owner com.sushihangover.cosu/com.sushihangover.cosu.DeviceAdminReceiver

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Xamarin的Android ListView错误

Xamarin Android:共享的MonoRuntime错误

Xamarin Android活动在AndroidManifest错误中重复

Android Xamarin NavigationView处理事件错误

Fragment 中的 Xamarin Android Google 地图错误

Xamarin Android Firebase Cloud Firestore错误

Xamarin Android:此应用的配置错误

Xamarin Android支持v7错误

Xamarin Android应用中的Autofac错误

android.os.FileUriExposedException错误-XAMARIN

在Xamarin表单上生成错误:Android

xamarin.android安装时发生错误

AndroidTV上的Android Management API(COSU)?

损坏的 Xamarin.Android.Common.targets 文件:_CompileJava 上的错误

SetPage(Xamarin.Forms.Page)'过时的错误-Android

Xamarin.Android - 发布模式下的 MvxRecyclerView 错误

创建基本的Xamarin.Android项目时编译错误

Xamarin.Android项目上的Dotfuscator抛出错误

目标 sdk 更改后 Xamarin.Android 构建错误

xamarin android构建错误:“无法为类创建JavaTypeInfo”

Xamarin Android中没有此类文件或目录错误

设置 Xamarin UI 测试获取错误与 Android SDK 不兼容

Xamarin.Forms:单击后错误的按钮文本对齐(Android)

Xamarin.Android在VS Team Service上自动构建错误

尝试查找VirtualBox时Xamarin Android Player错误

Xamarin Android(Mac) 持续错误:“无法加载 System.Drawing”

库升级后Xamarin Android项目编译错误

Xamarin Android AIDL可打包的Bundle的错误魔术数字

Xamarin.Android构建错误:重复的类R.java