4

我最近一直在探索设备管理 API,我发现我的代码和 android 开发网站上的示例代码都无法启用设备管理。

我在启动时遇到的错误是:

12-28 17:24:49.596: WARN/PackageManager(60): Not granting permission android.permission.BIND_DEVICE_ADMIN to package com.example (protectionLevel=2 flags=0x8446)

然后当我尝试启用管理员时:

12-28 17:27:22.426: WARN/DeviceAdminAdd(396): Unable to retrieve device policy ComponentInfo{com.example/com.example.Receiver}
org.xmlpull.v1.XmlPullParserException: No android.app.device_admin meta-data

我将所有权限设置为与清单的要求完全相同:

    <activity android:name=".MyActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".Receiver"
              android:label="device_admin"
              android:permission="android.permission.BIND_DEVICE_ADMIN"/>
              <meta-data android:name="android.app.device_admin"
                         android:resource="@xml/device_admin"  />
              <intent-filter>
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
              </intent-filter>

并且设备策略也完全按照 API 规定的要求进行设置。

<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>

我是否在获得许可时犯了错误,或者如果没有额外的代码签名就无法进行设备管理?

4

2 回答 2

1

您的 XML 格式错误,因为您<receiver />在指定元数据元素之前关闭了标签。应该是这样的:

<receiver android:name=".Receiver"
          android:label="device_admin"
          android:permission="android.permission.BIND_DEVICE_ADMIN">
      <meta-data android:name="android.app.device_admin"
                 android:resource="@xml/device_admin"  />
      <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
      </intent-filter>
</receiver>

想到的其他想法:

  • 在我的项目中,device_admin.xml 文件位于 \res\xml 目录中。也许确保您的 XML 文件在那里?

  • 您是否需要 android:label 上的@string 作为接收器?例如

android:label="@string/device_admin"
于 2011-05-10T20:18:35.917 回答
0

根据http://developer.android.com/guide/publishing/app-signing.html 调试器签名它只是为了编译+运行目的。难道它仍然不能在调试器中运行吗?

于 2010-12-29T00:08:39.543 回答